在UIImageView上长按手势

时间:2014-04-10 13:58:21

标签: ios objective-c uiimageview uigesturerecognizer

我有一个UIImageView图像圈。我想长按图片放大并将其移动到另一个地方,当它被释放时它会下降并保留在这个地方。但是当我松开手指时,图片会移动到起始位置。为什么?这是代码:

UILongPressGestureRecognizer *recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
recognizer.minimumPressDuration = .5;
recognizer.delegate = self;
[circle addGestureRecognizer:recognizer];

- (void)move:(UILongPressGestureRecognizer *)sender
{
   UIView *image_ = sender.view;
   CGPoint point = [sender locationInView:image_.superview];
   if (sender.state == UIGestureRecognizerStateBegan) {
       [UIView animateWithDuration:0.3 animations:^{
           image_.transform = CGAffineTransformMakeScale(1.2f, 1.2f);
       } completion:nil];
   }
   if (sender.state == UIGestureRecognizerStateChanged) {
       image_.center = point;
   }
   if (sender.state == UIGestureRecognizerStateEnded) {
       image_.center = point;
       [UIView animateWithDuration:0.3 animations:^{
           image_.transform = CGAffineTransformMakeScale(1.f, 1.f);
       } completion:nil];
   }
}

2 个答案:

答案 0 :(得分:2)

它回到起点的原因是因为你使用的是UILongPressGestureRecognizer。此类识别器不会为您提供跟踪用户输入位置的可靠更新。一旦手势结束,它可能会为您提供手势首次启动的点。

我还将图像的变换设置回身份变换,而不是在两个维度上将其缩放回1.0f。

解决方案是使用UIPanGestureRecognizer并正确跟踪手势在视图中的位置。这样做会好得多,而且最重要的是它是正确的方法。

答案 1 :(得分:0)

最好的方法是将图像视图添加到UIView。 所以它的UIView将是容器UIView并将UILongPressGesture添加到其容器视图中。 然后它会工作。 UIImageview不回复UILongPressGesture,其容器视图将回复它。 你会得到你想要的结果。 希望你的成功。