2016-07-23 62 views
0

我可以使用scrollView.scrollEnabled属性有效启用/禁用滚动。iOS:如何启用长按UIScrollView平移

目前我启用滚动longPressRecognizer的状态是UIGestureStateBegan和禁用滚动当它是UIGestureStateEnded

当我长按然后拖动我的手指,scrollView不滚动。

我觉得莫名其妙了滚动的panGestureRecognizer没有得到触摸事件,这是奇怪的,因为scrollView(我检查使用的touchesBegan,touchesMoved等方法)

回答

0

UIScrollView没有触及,因为在UIScrollView上启用滚动之前触摸已启动。此示例代码管理着滚动你与UILongPressGestureRecognizer,滚动一个大的UIImageView:

@IBOutlet weak var scrollView: UIScrollView! 
@IBOutlet var gr: UILongPressGestureRecognizer! 
var initialPos = CGPointZero 
var dragPos = CGPointZero 

// This action is bound to long press gesture recognizer within Interface Builder 
@IBAction func longpressHandler(sender: UILongPressGestureRecognizer) { 
    if sender.state == .Began { 
     // Save initial position for moving 
     initialPos = sender.locationInView(scrollView) 
    } 
    else if sender.state == .Changed { 
     // Get new drag location 
     let loc = sender.locationInView(scrollView) 
     let newPos = CGPoint(x: initialPos.x - loc.x + dragPos.x, y: initialPos.y - loc.y + dragPos.y) 
     dragPos = newPos 
     scrollView.contentOffset = newPos 
    } 
    else if sender.state == .Ended { 
     // Check for end position of the content, snap it back to the edge of the screen if moved too far 
     var newOffset = scrollView.contentOffset 
     var move = false 
     if scrollView.contentOffset.x < 0 { 
      newOffset.x = 0 
      move = true 
     } 
     if scrollView.contentOffset.y < 0 { 
      newOffset.y = 0 
      move = true 
     } 
     if scrollView.contentOffset.x > photo.frame.size.width - scrollView.frame.size.width { 
      newOffset.x = max(self.photo.frame.size.width - self.scrollView.frame.size.width, 0) 
      move = true 
     } 
     if scrollView.contentOffset.y > photo.frame.size.height - scrollView.frame.size.height { 
      newOffset.y = max(self.photo.frame.size.height - self.scrollView.frame.size.height, 0) 
      move = true 
     } 
     if move { 
      UIView.animateWithDuration(0.25, animations: { 
       self.scrollView.contentOffset = newOffset 
      }) 
     } 
    } 
} 

var photo = UIImageView(image: UIImage(named: "photo")) 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Set up your scrollview 
    scrollView.addSubview(photo) 
    scrollView.contentSize = photo.frame.size 

    // add the long press gesture recognizer to the scrollview 
    scrollView.addGestureRecognizer(gr) 
} 
+0

谢谢!这很好,你是圣人! –