【问题标题】:Rotate the custom view?旋转自定义视图?
【发布时间】:2013-02-25 13:46:27
【问题描述】:

我的自定义视图上有一些图纸,想让用户旋转它

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;
    }
}

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

【问题讨论】:

    标签: ios core-animation core-graphics


    【解决方案1】:

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

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

    我认为这对你会有帮助。

    【讨论】:

      【解决方案2】:

      好的,问题出在你的rotate方法上,试试这段代码,

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

      【讨论】:

      • 之前试过这个,旋转的时候会缩放,怎么解决?
      【解决方案3】:

      使用此代码旋转您的视图,在您的视图上启用用户交互和多点触控。

      - (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

      【讨论】:

      • 旋转时缩放。
      • 我不明白你在说什么,你能解释一下吗。
      • 当我旋转它时,它只是在接近 k*90 度时变大,在接近 k*45 度时变小! (在控制台上也能得到很多东西)
      • 我下载了示例代码,实际运行良好..(示例代码)
      • 它不缩放,它像这样显示,因为你的视图不是精确的正方形,所以当它变成水平时,它会显示大于垂直。我没有得到任何日志值。你能把你的在评论中记录值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 2011-01-29
      相关资源
      最近更新 更多