大佬教程收集整理的这篇文章主要介绍了ios – 如何识别触摸的图像,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的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个图像中的哪一个被丢弃,以便我绘制特定的图像!
NotificationCenter.default.post(Notification(name: Notification.Name(rawValue: "onTargetDropped"),object: self,userInfo: ["position":position]))
稍后在itemDroppedOnTree中获取它:
func itemDroppedOnTree(_ notif : NSNotification){ let position = notif.userInfo["position"] let sender = notif.object as! DragImage if sender === dragImage1 { //... } else if sender === dragImage2 { //... } }
我建议反对它,并恳求使用委托来通知ViewController. (基于意见:通常,仅对多人广播使用通知.)
委托函数应将sender作为第一个参数.根据func tableView:tableView:UITableView,cellForRowAt indexPath:IndexPath).
通过这种方式,您可以知道哪个图像正在发送其新位置,并可以将其与您的属性进行比较,如上例所示:
if dragImage === dragImage1 {...
import UIKit import PlaygroundSupport protocol DragImageDelegate: class { func dragimage(_ dragImage:DragImage,didDropAt position:CGPoint) } class DragImage: UIImageView { weak var delegate: DragImageDelegate? var originalPos : CGPoint! var dropTarget: UIView? override init (frame : CGRect) { super.init(frame: frame) isUserInteractionEnabled = true } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func touchesBegan(_ 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){ print(self.center.x,self.center.y) guard let delegate = self.delegate else { print("delegate not set") return } print(self.center.x,self.center.y) delegate.dragimage(self,didDropAt: position) return } } self.center = originalPos } } class MyVC: UIViewController,DragImageDelegate { let dragImage1 = DragImage(frame: CGRect(x: 0.0,y: 0.0,width: 30.0,height: 30.0)) let dragImage2 = DragImage(frame: CGRect(x: 0.0,y: 100.0,height: 30.0)) override func viewDidLoad() { let target = UIView(frame: CGRect(x: 200.0,y: 400.0,height: 30.0)) target.backgroundColor = .black view.addSubview(target) dragImage1.backgroundColor = .white dragImage2.backgroundColor = .white dragImage1.dropTarget = target dragImage2.dropTarget = target view.addSubview(dragImage1) view.addSubview(dragImage2) dragImage1.delegate = self dragImage2.delegate = self } private func move(_ view:UIView,to position:CGPoint) { view.frame = CGRect(x: position.x,y: position.y,width: view.frame.size.width,height: view.frame.size.height) } // MARK: - DragImageDelegate func dragimage(_ dragImage: DragImage,didDropAt position: CGPoint) { if dragImage === dragImage1 { move(dragImage1,to: position) } else if dragImage === dragImage2 { move(dragImage2,to: position) } } } var container = UIView(frame: CGRect(x: 0.0,width: 300.0,height: 600.0)) let myVc = MyVC() myVc.view.frame = CGRect(x: 0.0,height: 600.0) myVc.view.backgroundColor = .green container.addSubview(myVc.view) PlaygroundPage.current.liveView = container
结果:
以上是大佬教程为你收集整理的ios – 如何识别触摸的图像全部内容,希望文章能够帮你解决ios – 如何识别触摸的图像所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。