如何使用Pan Gestures

时间:2014-03-10 22:22:43

标签: ios objective-c gesture uipangesturerecognizer pan

我是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;
  }

}

3 个答案:

答案 0 :(得分:4)

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

现在你正在使用平移手势,所以我给出了以下步骤来添加平移手势,

  1. 将代理添加到头文件[.h文件]

    @interface ViewName : UIView <UIGestureRecognizerDelegate>
    
  2. 宣布该手势

    @property (nonatomic,strong) UIPanGestureRecognizer *pan;
    
  3. 分配该手势

    pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)];
    
  4. 提及这些委托方法的存在位置

    pan.delegate = self;
    
  5. 将该手势添加到视图中,如

    [self.view addGestureRecognizer:pan];
    
  6. 定义handlePan方法,如

    - (void)handlePan:(UIPanGestureRecognizer *)recognizer
    { 
       // code for pan gesture here
    }
    
  7. 我认为你错过了一些事情......希望这会解决你的问题,检查你是否在头文件中添加了UIGestureRecognizer ......

答案 1 :(得分:1)

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

_Imageview.userInteractionEnabled = YES

答案 2 :(得分:0)

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

观看并设置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.bringSubview(toFront: 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%正常工作并经过测试