Я разрабатываю приложение, которое пользователь сможет перетаскивать элементы на холсте, и когда он отпускает изображение, оно нарисовано на холсте.Как распознать, какое изображение было затронуто
Это мой DragImage класс, который обрабатывать штрихи:
class DragImages: UIImageView {
var originalPos : CGPoint!
var dropTarget: UIView?
override init (frame : CGRect){
super.init(frame: frame)
}
required init?(coder aDecoder : NSCoder){
super.init(coder : aDecoder)
}
override func touchesBegan(_ touches : Set<UITouch>,with event: UIEvent?){
originalPos = self.center
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first{
let position = touch.location(in: self.superview)
self.center = CGPoint(x : position.x, y : position.y)
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first, let target = dropTarget{
let position = touch.location(in: self.superview)
if target.frame.contains(position){
NotificationCenter.default.post(Notification(name: Notification.Name(rawValue: "onTargetDropped"), object: nil))
}else {
self.center = originalPos
}
}
print(self.center.x, self.center.y)
self.center = originalPos
}
func getEndPosX() -> CGFloat{
return self.center.x
}
func getEndPosY() -> CGFloat {
return self.center.y
}
}
В моем классе ViewController я добавил этот кусок кода для обработки прикосновений и т.д.:
ornament1.dropTarget = xmasTree
ornament2.dropTarget = xmasTree
ornament3.dropTarget = xmasTree
ornament4.dropTarget = xmasTree
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.itemDroppedOnTree(_:)), name: NSNotification.Name(rawValue: "onTargetDropped"), object: nil)
}
func itemDroppedOnTree(_ notif : AnyObject){
}
мне удалось получить X и Y, когда изображение перетаскивается на холст, но я не могу найти способ распознать, какое из 4 изображений отбрасывается, чтобы я мог нарисовать этот конкретный!
Во-первых, не забудьте установить UIImageView.isUserInteractionEnabled() в true (простая ошибка, мы все это делаем). Во-вторых, настройте свойства тегов - они помогут вам узнать, что было затронуто. В третьих? Все выглядит хорошо, но если у вас есть другие проблемы, попробуйте использовать UIGestureRecognizers или отлаживайте текущую настройку. – dfd
ive попытался использовать UIGestureRecognizer, но не повезло. Когда вы сказали свойство тега, насколько я могу использовать это в моем случае? не могли бы вы дать мне пример кода, чтобы вести меня? – pavlos
Используйте делегат для уведомления viewController вместо уведомлений. Функция делегата имеет седер в качестве первого параметра. например 'tableView: tableView cellForRowAt: ...'. Таким образом, вы знаете, какой имидж. В общем, используйте только уведомления для многих трансляций. – shallowThought