2013-02-25 95 views
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; 
    } 
} 

它只是不工作,但相当颤抖?

回答

0

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

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

//... 
} 

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

0

好了,问题是你的旋转方法,试试这个代码,

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

试过这个,它在旋转时缩放,如何解决? – PlusA 2013-02-26 07:07:54

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

+0

它在旋转时缩放。 – PlusA 2013-02-26 07:08:37

+0

我不明白你在说什么,你能解释一下吗? – Dilip 2013-02-26 07:13:27

+0

在接近K * 90度时接近K * 45度时它变得更大,而我旋转它时变得更小! (也在控制台上得到很多东西) – PlusA 2013-02-26 07:18:44