【问题标题】:Drag a newly created subview from a collectionView using pan gestures使用平移手势从 collectionView 中拖动新创建的子视图
【发布时间】:2016-02-17 00:04:06
【问题描述】:

我有一个 ViewController,下面有一个基本的集合视图。我现在可以单击集合视图中的单元格并添加所选图像的子视图。 我坚持允许用户按下单元格并将新的子视图拖到主视图上,而无需用户抬起手指并重新选择,从而激活平移手势。

我如何以编程方式为新创建的子视图启动平移手势,所以看起来用户正在从 collectionView 中拖出一个副本?

func collectionView(collectionView: UICollectionView, didHighlightItemAtIndexPath indexPath: NSIndexPath) {
    stickerImage = imageArray[indexPath.item]!

    let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
    dispatch_async(dispatch_get_global_queue(priority, 0)) {
        dispatch_async(dispatch_get_main_queue()) {
            // update UI on the main thread
            var newImageView = UIImageView(image: self.stickerImage)

            newImageView.userInteractionEnabled = true
            newImageView.multipleTouchEnabled = true
            newImageView.exclusiveTouch = true
            newImageView.contentMode = .ScaleAspectFit

            let panGesture = UIPanGestureRecognizer(target: self, action:Selector("handlePan:"))
            panGesture.delegate = self
            newImageView.addGestureRecognizer(panGesture)


            newImageView.frame = self.view.bounds
            newImageView.frame.size.width = 150
            newImageView.frame.size.height = 150

            let cell = collectionView.dequeueReusableCellWithReuseIdentifier(self.reuseIdentifier, forIndexPath: indexPath) as! CollectionViewCell

            newImageView.center.y = self.view.frame.height - collectionView.frame.height / 2
            newImageView.center.x = cell.center.x

            self.view.addSubview(newImageView)
            self.view.bringSubviewToFront(newImageView)
        }
    }

}

func handlePan(recognizer:UIPanGestureRecognizer) {

    self.view.bringSubviewToFront(recognizer.view!)
    let translation = recognizer.translationInView(recognizer.view)
    if let view = recognizer.view {
        view.transform = CGAffineTransformTranslate(view.transform, translation.x, translation.y)
    }
    recognizer.setTranslation(CGPointZero, inView: recognizer.view)
}

【问题讨论】:

    标签: ios swift uicollectionview uigesturerecognizer pan


    【解决方案1】:

    您是否尝试过将触摸方法覆盖为 touchbegin 和 touchend。覆盖这些方法,您将不必关心平移手势,只需检查识别触摸的视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      相关资源
      最近更新 更多