0

カスタム ビューにいくつかの描画があり、ユーザーが回転できるようにしたい

viewContorller.m:

-(void)setMyView:(myView *)myView {
...
    [self.faceView addGestureRecognizer:[[UIRotationGestureRecognizer alloc] initWithTarget:faceView action:@selector(rotate:)]];
...
}

faceView.m

- (void)rotate:(UIRotationGestureRecognizer *)gesture
{
    if (gesture.state == UIGestureRecognizerStateChanged) {
        self.transform = CGAffineTransformMakeRotation(gesture.rotation);
        gesture.rotation = 0;
    }
}

うまくいかないだけで、かなり揺れていますか?

4

3 に答える 3

0

次のコードを使用し、viewController.h クラスに UIGestureRecognizerDelegate も追加します。

-(void)setMyView:(myView *)myView {
//...
        UIRotationGestureRecognizer* rotateRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
        rotateRecognizer.delegate = self;
        [self.faceView addGestureRecognizer:rotateRecognizer];

//...
}

お役に立てると思います。

于 2013-02-25T13:50:51.710 に答える
0

OK、問題は回転メソッドにあります。このコードを試してください。

- (void)rotate:(UIRotationGestureRecognizer *)gesture
{
    if (gesture.state == UIGestureRecognizerStateChanged) {
        self.transform = CGAffineTransformRotate(self.transform, [gesture rotation]);
        gesture.rotation = 0;
    }
}
于 2013-02-25T13:58:17.230 に答える
0

このコードを使用して、ビューを回転させ、ユーザー インタラクションを有効にし、ビューでマルチタッチを有効にします。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotatePiece:)];
    [self.myview addGestureRecognizer:rotationGesture];
}

- (void)rotatePiece:(UIRotationGestureRecognizer *)gestureRecognizer
{
    [self adjustAnchorPointForGestureRecognizer:gestureRecognizer];

    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
        [gestureRecognizer view].transform = CGAffineTransformRotate([[gestureRecognizer view] transform], [gestureRecognizer rotation]);
        [gestureRecognizer setRotation:0];
    }
}

- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
        UIView *piece = gestureRecognizer.view;
        CGPoint locationInView = [gestureRecognizer locationInView:piece];
        CGPoint locationInSuperview = [gestureRecognizer locationInView:piece.superview];

        piece.layer.anchorPoint = CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height);
        piece.center = locationInSuperview;
    }
}

このコードは、apples サンプル コードtouchesからのものです。

于 2013-02-25T14:08:36.720 に答える