如何使用 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的主要内容,如果未能解决你的问题,请参考以下文章

[精选] Mysql分表与分库如何拆分,如何设计,如何使用

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等