У меня есть таблица, и я хотел бы выбрать два объекта (строки таблицы) для сравнения. Я хотел бы сделать это длинным жестом, он создает копию ячейки 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 или окна, а не в виде таблицы?