我有一个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];
}
}
答案 0 :(得分:2)
它回到起点的原因是因为你使用的是UILongPressGestureRecognizer
。此类识别器不会为您提供跟踪用户输入位置的可靠更新。一旦手势结束,它可能会为您提供手势首次启动的点。
我还将图像的变换设置回身份变换,而不是在两个维度上将其缩放回1.0f。
解决方案是使用UIPanGestureRecognizer
并正确跟踪手势在视图中的位置。这样做会好得多,而且最重要的是它是正确的方法。
答案 1 :(得分:0)
最好的方法是将图像视图添加到UIView。 所以它的UIView将是容器UIView并将UILongPressGesture添加到其容器视图中。 然后它会工作。 UIImageview不回复UILongPressGesture,其容器视图将回复它。 你会得到你想要的结果。 希望你的成功。