代码之家  ›  专栏  ›  技术社区  ›  Rahul Vyas

检测旋转手势和缩放手势iphone sdk

  •  0
  • Rahul Vyas  · 技术社区  · 14 年前

    我想旋转uiimageview也可以缩放图像视图,所以如何检测用户正在缩放或正在旋转的触摸手势?

    2 回复  |  直到 14 年前
        1
  •  1
  •   rickharrison    14 年前

    从iOS 3.2开始,苹果引入了 UIGestureRecognizer 你感兴趣的两个是 UIPinchGestureRecognizer UIRotationGestureRecognizer . 要使用捏手势,可以执行以下操作:

    - (void)viewDidLoad {
        UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)];
        [imageView addGestureRecognizer:pinch];
        [pinch release];
    }
    
    - (void)handlePinchGesture:(UIGestureRecognizer *)sender {
        NSLog(@"New Scale: %f", sender.scale);
    }
    

    旋转手势识别器

        2
  •  0
  •   D-eptdeveloper    11 年前

    在viewcontroller.h文件中记下此属性

    IBOutlet UIImageView *imgRotate;
    CGFloat lastScale;
    CGFloat lastRotation;
    

    现在在viewcontroller.m文件中编写以下代码,

    - (void)viewDidLoad
    {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
    [pinchRecognizer setDelegate:self];
    [imgRotate addGestureRecognizer:pinchRecognizer];
    
    UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
    [rotationRecognizer setDelegate:self];
    [imgRotate addGestureRecognizer:rotationRecognizer];
    }
    
    -(void)scale:(id)sender
    {
    if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded)
    {
        lastScale = 1.0;
        return;
    }
    
    CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]);
    
    CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
    
    [[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform];
    
    [imgRotate setTransform:newTransform];
    lastScale = [(UIPinchGestureRecognizer*)sender scale];
    }
    
    -(void)rotate:(id)sender
    {
    if([(UIRotationGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded)
    {
        lastRotation = 0.0;
        return;
    }
    
    CGFloat rotation = 0.0 - (lastRotation - [(UIRotationGestureRecognizer*)sender rotation]);
    
    CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
    CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation);
    
    [[(UIRotationGestureRecognizer*)sender view] setTransform:newTransform];
    
    [imgRotate setTransform:newTransform];
    lastRotation = [(UIRotationGestureRecognizer*)sender rotation];
    }
    
    -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
    {
    UITouch *touch = [touches anyObject];
    
    if ([touch view] == imgRotate) {
        CGPoint location = [touch locationInView:self.view];
        imgRotate.center = location;
    }
    }