ios - 如何截取uiview的屏幕截图并快速拖动?

标签 ios swift swift3 nskeyedarchiver uilongpressgesturerecogni

我得到了代码,但它不起作用,如果我做错了什么,请告诉我。 在代码中,我有一个以编程方式创建的 ImageView ,并将图像添加到 uiview 中。现在我无法在“draggingView”中加载图像。

func longPressed(_ sender : UILongPressGestureRecognizer){

    let locationInView = sender.location(in: self.view)
    let cell = sender.view as? ParamterCollectionViewCell
    var tImageView: UIImageView!
    tImageView.frame = CGRect(x:0, y:0, width: 30 , height:30)
    tImageView.image = parameterImageArray[0]

    switch sender.state {
    case .began:
        // create an NSData object from myView
        let archive = NSKeyedArchiver.archivedData(withRootObject: tImageView!)

        // create a clone by unarchiving the NSData
       draggingView = NSKeyedUnarchiver.unarchiveObject(with: archive) as? UIView

        self.view.addSubview(draggingView!)
        draggingView!.center = locationInView;
        self.view.bringSubview(toFront: draggingView!)

        break

    case .changed:
        if (contentView.frame.contains(locationInView)) {
            draggingView?.center = locationInView;
        }
        break

    case .ended:
        break

    default:
        break

}

}

最佳答案

试一试...在想法上与您的代码非常相似,但我认为这可能是一种更好的方法:

func longPressed(_ sender : UILongPressGestureRecognizer) {

    let locationInView: CGPoint = sender.location(in: self.view)
    let locationInCollectionView: CGPoint = sender.location(in: self.collectionView)

    if sender.state == .began {
        if let indexPath: IndexPath = self.collectionView.indexPathForItem(at: locationInCollectionView) {
            if let cell = self.collectionView.cellForItem(at: indexPath) {

                UIGraphicsBeginImageContext(cell.bounds.size)
                cell.layer.render(in: UIGraphicsGetCurrentContext()!)
                let cellImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
                UIGraphicsEndImageContext()

                self.movingCellImageView = UIImageView(image: cellImage)
                self.movingCellImageView?.alpha = 0.75

                self.view.addSubview(self.movingCellImageView!)
                self.movingCellImageView?.center = locationInView
            }
        }
    }
    // Move movingCellImageView following finger position
    if sender.state == .changed {
        self.movingCellImageView?.center = locationInView
    }
    // Remove movingCellImageView when ended
    if sender.state == .ended {
        UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseOut, animations: {
            self.movingCellImageView?.alpha = 0
        }, completion: { (success: Bool) in
            self.movingCellImageView?.removeFromSuperview()
            self.movingCellImageView = nil
        })
    }
}

引用资料:

蒂姆·帕克特 - https://adoptioncurve.net/archives/2014/07/creating-a-draggable-uicollectionviewcell/

Chan Jing Hong 的快速实现 http://eatliftswift.weebly.com/technical/creating-a-draggable-uicollectionviewcell

关于ios - 如何截取uiview的屏幕截图并快速拖动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43117879/

相关文章:

ios - Swift3 中奇怪的类名与 Core Data 冲突

android - 可以在 iOS 设备上强制预加载 HTML5 视频吗?

ios - 找不到 'refs/heads/master'引用错误

带有自定义容器 View Controller 的 ios UITableView 崩溃

ios - 检测当前货币在哪一边

ios - UICollectionReusableView 中的标签始终为零

swift - 具有 UserDefaults 的全局数据 - Swift

ios - 快速网络服务通信

ios - 下载数据并显示

swift3 - 无法使用 'JSON' 类型的索引为 'STRING' 类型的值添加下标