旋转自定义视图?

时间:2013-02-25 13:46:27

标签: ios core-animation core-graphics

我在自定义视图上有一些绘图,想让用户旋转它 viewController.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;
    }
}

它只是不起作用,但相当震动?

3 个答案:

答案 0 :(得分:0)

使用以下代码,并在viewController.h类中添加UIGestureRecognizerDelegate。

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

//...
}

我认为这会对你有所帮助。

答案 1 :(得分:0)

好的,问题在于你的旋转方法,试试这段代码,

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

答案 2 :(得分: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;
    }
}

此代码来自苹果示例代码touches