CALayer响应点击事件
来源:互联网 发布:ios 微信图片压缩算法 编辑:程序博客网 时间:2024/04/30 06:54
最近在工作中遇到这样一个需求:需要做一个比较复杂的动效,所以用到关键帧动画,但是关键帧动画的作用对象是CALayer,那么问题就来了,由于CALayer是直接继承自NSObject,而只有继承自UIResponder才能响应事件,例如UIView。那么怎么让CALayer响应点击事件呢?这就是我们今天要讨论的问题。
解决这个问题有两个方案,一是利用containsPoint,二是利用hitTest。那么我们废话不说,直接上代码
import UIKitclass ViewController: UIViewController { let layerOne = CALayer() let layerTwo = CALayer() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.yellowColor() layerOne.frame = CGRectMake(100, 100, 50, 50) layerOne.backgroundColor = UIColor.redColor().CGColor view.layer.addSublayer(layerOne) layerTwo.frame = CGRectMake(100, 200, 50, 50) layerTwo.backgroundColor = UIColor.blueColor().CGColor view.layer.addSublayer(layerTwo) } override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { //方法一:运用containsPoint var p = (touches as NSSet).anyObject()?.locationInView(view) p = view.layer.convertPoint(p!, fromLayer: view.layer) if view.layer.containsPoint(p!) { let b = layerOne.convertPoint(p!, fromLayer: view.layer) if layerOne.containsPoint(b) { let alert = UIAlertView.init(title: "提示", message: "点击了红色按钮", delegate: nil, cancelButtonTitle: "取消") alert.show() } let a = layerTwo.convertPoint(p!, fromLayer: view.layer) if layerTwo.containsPoint(a) { let alert = UIAlertView.init(title: "提示", message: "点击了蓝色按钮", delegate: nil, cancelButtonTitle: "取消") alert.show() } }// //方法二:运用hitTest// let p = (touches as NSSet).anyObject()?.locationInView(view)// // let clickLayer = layerOne.hitTest(p!)// // if clickLayer == layerOne {// let alert = UIAlertView.init(title: "提示", message: "点击了红色按钮", delegate: nil, cancelButtonTitle: "取消")// alert.show()// }// // let anotherLayer = layerTwo.hitTest(p!)// // if anotherLayer == layerTwo {// let alert = UIAlertView.init(title: "提示", message: "点击了蓝色按钮", delegate: nil, cancelButtonTitle: "取消")// alert.show()// } }}
这样问题就迎刃而解了,下面我们来看看效果
另外这两个方法还有一个非常重要的应用,实现不规则图像的响应事件,例如我们平常的按钮都是方形的,那么我要定义个圆形按钮该怎么做呢,又比如实现tabBar的中间按钮突出tabBar的效果是,超出tabBar的部分怎么响应点击事件。这里我提供一个博客链接,大家一起学习。
http://www.cnblogs.com/wengzilin/p/4249847.html
0 0
- CALayer响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- UIImageView响应点击事件
- 错误: Sys.WebForms.PageRequestManagerParserErrorException: 未能分析从服务器收到的消息。
- js拖拽俄罗斯方块小游戏(一)
- 初学PS之换背景
- Android动画(一):View动画(补间动画)
- thinking in java test3.17练习(14)
- CALayer响应点击事件
- [笔试练习]腾讯2017暑期实习生编程题
- android studio inputstream getassets openrawresource new URL
- 原来我一直不懂二分!!
- Dubbo多协议
- meta http-equiv=… 的功能介绍
- POJ 2126 Factoring a Polynomial
- SQLi Labs Lesson7
- 基于阴影图的阴影算法总结笔记