如何使用平移手势

Posted

技术标签:

【中文标题】如何使用平移手势【英文标题】:How to use Pan Gestures 【发布时间】:2014-03-10 22:22:43 【问题描述】:

我是 Xcode 5 的初学者程序员,正在尝试编写代码以允许用户通过用户触摸输入来移动图像。

到目前为止,我相信我的代码是正确的,但我相信我缺少一些东西,因为 UIImage 拒绝移动。尽管尝试使用 NSLog 对其进行测试时,我没有得到表明它有效的响应。我猜我必须为图像创建一个自定义类,如果是这样我会这样做以及如何链接它。

例如

  @implementation StartPage
  - (IBAction)HandlePan:(UIGestureRecognizer *)sender; 
  NSLog(@"panning"); //Testing to check if the image moves when touched by user.

  CGPoint NetTranslation ;
  CGPoint Translation =
 [(UIPanGestureRecognizer *) sender translationInView: _Imageview ];

  sender.view.transform=CGAffineTransformMakeTranslation (

  NetTranslation.x += Translation.x,
  NetTranslation.y += Translation.y);
  enter code here
  if(sender.state == UIGestureRecognizerStateEnded)
  
   NetTranslation.x += Translation.x;
   NetTranslation.y += Translation.y;
  

【问题讨论】:

“虽然当尝试使用 NSLog 测试它时,我没有得到显示它工作的响应。”所以您的问题是手势识别器不适用于您的视图。请在初始化手势识别器的位置添加代码。 【参考方案1】:

在使用任何手势时,您应该使用以下步骤,

现在您正在使用平移手势,所以我提供以下步骤来添加平移手势,

    在您的头文件 [.h 文件] 中添加类似的委托

    @interface ViewName : UIView <UIGestureRecognizerDelegate>
    

    声明那个手势

    @property (nonatomic,strong) UIPanGestureRecognizer *pan;
    

    分配那个手势

    pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)];
    

    提及这些委托方法所在的位置

    pan.delegate = self;
    

    将该手势添加到视图中

    [self.view addGestureRecognizer:pan];
    

    将handlePan方法定义为

    - (void)handlePan:(UIPanGestureRecognizer *)recognizer
     
       // code for pan gesture here
    
    

我认为你错过了做某事......希望这能解决你的问题,检查你是否在头文件中添加了 UIGestureRecognizer ......

【讨论】:

谢谢你的回答,我有点特别,没有检查我的页面之间的链接。现在一切正常。 Gr8,嘿,伙计,如果你觉得这个答案很有用,那么你可以投票...祝你好运...【参考方案2】:

如果您的 HandlePan 方法未被调用,请检查您的 _Imageview 是否启用了用户交互:

_Imageview.userInteractionEnabled = YES

【讨论】:

谢谢你的回答,我有点特别,没有检查我的页面之间的链接。现在一切正常。【参考方案3】:

对于 swift 语言,我们可以这样做:

查看并设置IBOutlet:

@IBOutlet weak var viewDrag: UIView!

var panGesture = UIPanGestureRecognizer()

在 viewDidLoad() 上写这段漂亮的代码

 panGesture = UIPanGestureRecognizer(target: self, action: #selector(self.draggedView(_:)))
    viewDrag.isUserInteractionEnabled = true
    viewDrag.addGestureRecognizer(panGesture)

这是在识别手势时调用的方法

 @objc func draggedView(_ sender:UIPanGestureRecognizer)
    self.view.bringSubviewToFront(viewDrag)
    let translation = sender.translation(in: self.view)
    viewDrag.center = CGPoint(x: viewDrag.center.x + translation.x, y: viewDrag.center.y + translation.y)
    sender.setTranslation(CGPoint.zero, in: self.view)

100% 工作和测试

【讨论】:

以上是关于如何使用平移手势的主要内容,如果未能解决你的问题,请参考以下文章

使用平移、旋转和捏合手势编辑后如何保存 UIImage

如何确定平移手势的真实结束速度?

如何检测哪个视图正在平移手势 Swift

android手势如何平移控件

Swift:当定时器触发时,如何阻止平移手势取消?

如何禁用 UIScrollView 到平移手势识别器?