Перетащите ячейку таблицы в получающий UIView - PullRequest
0 голосов
/ 13 июня 2019

У меня есть таблица, и я хотел бы выбрать два объекта (строки таблицы) для сравнения. Я хотел бы сделать это длинным жестом, он создает копию ячейки UIView и добавляет ее в суперпредставление, а затем я могу перетащить это за пределы таблицы в получающий UIView, который затем отобразит этот перетаскиваемый UIView, и перетащенный объект будет удален из вида.

@objc func handleLongPress(_ gestureRecognizer: UILongPressGestureRecognizer){

        let touchPoint = gestureRecognizer.location(in: tableView)
        let longpress = gestureRecognizer as! UILongPressGestureRecognizer
        let state = longpress.state
        let locationInView = longpress.location(in: self.tableView)
        let locationInSuperView = longpress.location(in: self.view.superview)
        if let indexPath = tableView.indexPathForRow(at: touchPoint) {
            print("Selected Index equals \(indexPath)")

            switch state {
            case .began:
                if indexPath != nil {
                    Path.initialIndexPath = indexPath
                    let cell = self.tableView.cellForRow(at: indexPath) as! measurementTableCell
                    My.cellSnapShot = snapshopOfCell(inputView: cell)
                    var center = cell.center
                    My.cellSnapShot?.center = center
                    My.cellSnapShot?.alpha = 0.0
                    self.view.addSubview(My.cellSnapShot!)

                    UIView.animate(withDuration: 0.25, animations: {
                        My.cellSnapShot?.center = locationInView
                        My.cellSnapShot?.alpha = 0.98
                    }, completion: { (finished) -> Void in
                        if finished {
                        }
                    })
                }

            case .changed:
                print("Case changed")
                My.cellSnapShot?.center = locationInSuperView

          default:
                let cell = self.tableView.cellForRow(at: Path.initialIndexPath!) as! measurementTableCell

                 cell.alpha = 0.0

        }
    }


func snapshotOfCell(inputView: UIView) -> UIView {

    UIGraphicsBeginImageContextWithOptions(inputView.bounds.size, false, 0.0)
    inputView.layer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    let cellSnapshot : UIView = UIImageView(image: image)
    cellSnapshot.layer.masksToBounds = false
    cellSnapshot.layer.cornerRadius = 0.0
    cellSnapshot.layer.shadowOffset = CGSize(width: -5.0, height: 0.0)
    cellSnapshot.layer.shadowRadius = 5.0
    cellSnapshot.layer.shadowOpacity = 0.4
    return cellSnapshot
}

struct My {
    static var cellSnapShot: UIView? = nil
}

struct Path {
    static var initialIndexPath: IndexPath? = nil
}

Выше добавлен жест к моему tableView. В настоящее время он создает UIView, используя функцию snapshotOfCell и добавляя в основной вид. Я могу перетащить это, но я все еще ограничен рамками моего tableView. Изображение рисуется вне этого, но это похоже на то, что расположение центра ограничено границами графика. Есть ли другой способ получить точечное местоположение для всего UIView или окна, а не в виде таблицы?

...