如何使用 UIPanGestureRecognizer 移动 2 个或更多 UIImageViews
Posted
技术标签:
【中文标题】如何使用 UIPanGestureRecognizer 移动 2 个或更多 UIImageViews【英文标题】:How to use UIPanGestureRecognizer to move 2 or more UIImageViews 【发布时间】:2011-11-21 13:45:14 【问题描述】:在解释如何使用 UIPanGestureRecognizer 移动 UIImageView 时,这个网站非常有帮助,但是我有一个程序需要移动(即平移)多个 UIImageView,而且我一生都可以'找不到如何做到这一点的示例。
我知道将 UIPanGestureRecognizer 分配给 UIView,但我无法在 UIView 中平移任何 UIImageView,我只知道使用 UIView 仅平移一个 UIImageView 的代码,如下面的代码所示。
这是我使用的代码。
- (void)viewDidLoad
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[_canvas addGestureRecognizer:panRecognizer];
[super viewDidLoad];
-(void)move:(id)sender
CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:_canvas];
if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan)
_firstX = [photoImage center].x;
_firstY = [photoImage center].y;
translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y);
[photoImage setCenter:translatedPoint];
我可以平移一个名为 photoImage 的 UIImageView,但知道平移多个 UIImageView 的代码是什么样的。
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:您应该将手势识别器添加到所有图像而不是 _canvas。 并将这些视图的 userInteractionEnabled 设置为 YES
[imageView setUserInteractionEnabled:YES];
[imageView addGestureRecognizer:panRecognizer];
【讨论】:
感谢您的帮助@Yadyn。这是修改后的代码,但只有 photoImage2 UIImageView 会平移。 - (void)viewDidLoad ... [photoImage setUserInteractionEnabled:YES]; [photoImage2 setUserInteractionEnabled:YES]; [photoImage addGestureRecognizer:panRecognizer]; [photoImage2 addGestureRecognizer:panRecognizer]; ... -(void)move:(id)sender ... _firstX = [(UIPanGestureRecognizer*)sender locationInView:self.view].x; _firstY = [(UIPanGestureRecognizer*)sender locationInView:self.view].y; ... [(UIPanGestureRecognizer*)sender view].center = translatePoint; UIPanGestureRecognizer *recognizer = (UIPanGestureRecognizer *)sender; UIView *selectedView = [识别器视图]; CGPoint point = [识别器translationInView:self.view]; if ([识别器状态] == UIGestureRecognizerStateBegan) firstX = selectedView.center.x; firstY = selectedView.center.y; 点 = CGPointMake(firstX+point.x, firstY+point.y); [selectedView setCenter:point]; if ([recognizer state] == UIGestureRecognizerStateEnded) [selectedView setCenter:point];我使用这段代码,无论有多少视图,它对我来说都很好【参考方案2】:我刚刚为执行该操作的人编写了一个应用程序。基本上,您所要做的就是创建图像视图,并将它们插入到 NSArray 中,如下所示:
NSArray *imageViews = @[imageView, imageView2];
然后,只需使用 for 循环遍历每一个。
for (int i = 0; i < imageViews.count; i++)
[imageViews[i] setUserInteractionEnabled:YES];
[imageViews[i] addGestureRecognizer:panRecognizer];
这就是执行此操作所需的全部内容。只需确保上面的代码在您的 viewDidLoad 方法中,因为这是您创建 panGesture 的地方。
希望这会有所帮助!
【讨论】:
以上是关于如何使用 UIPanGestureRecognizer 移动 2 个或更多 UIImageViews的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]