swift详解之二十六-----------CALayer 判断是否点击hitTest 和 contensRect

swift详解之二十六-----------CALayer 判断是否点击hitTest 和 contensRect,第1张

概述CALayer 判断是否点击hitTest CALayer并不关心任何响应链事件,所以不能直接处理触摸事件或者手势。但是它有一系列的方法帮你处理事件:containsPoint:和hitTest:。 下来看看这两个方法怎么使用 。 首先来看containsPoint , 首先在界面上拖一个UIView出来 , 在上面放两份layer 。 ly1.frame = CGRectMake(0, 0, 2 CALayer 判断是否点击hitTest

CALayer并不关心任何响应链事件,所以不能直接处理触摸事件或者手势。但是它有一系列的方法帮你处理事件:containsPoint:hitTest:

下来看看这两个方法怎么使用 。

首先来看containsPoint , 首先在界面上拖一个UIVIEw出来 , 在上面放两份layer 。

ly1.frame = CGRectMake(0,0,20,20)        ly1.backgroundcolor = UIcolor.redcolor().CGcolor        v1.layer.addSublayer(ly1)        ly2.frame = CGRectMake(40,20)        ly2.backgroundcolor = UIcolor.redcolor().CGcolor        v1.layer.addSublayer(ly2)

大概就这样的

然后重写touchesBegan 方法

overrIDe func touchesBegan(touches: Set<UItouch>,withEvent event: UIEvent?) {        var p = (touches as NSSet).anyObject()?.locationInVIEw(v1);        p = v1.layer.convertPoint(p!,fromLayer: v1.layer)        //方法1        if v1.layer.containsPoint(p!) {            p = ly1.convertPoint(p!,fromLayer: v1.layer)            if ly1.containsPoint(p!){               let alert = UIAlertVIEw(Title: "点击了",message: "第一个被点击了",delegate: nil,cancelbuttonTitle: "OK")                alert.show()            }            p = ly2.convertPoint(p!,fromLayer: v1.layer)            if ly2.containsPoint(p!){                let alert = UIAlertVIEw(Title: "点击了",message: "第二个被点击了",cancelbuttonTitle: "OK")                alert.show()            }        } }

效果:

就这样的效果 , 别的Layer 可以暂时不管

hitTest 方法

//方法2        let p1 = (touches as NSSet).anyObject()?.locationInVIEw(self.v1);        //p1 = v1.layer.convertPoint(p1!,fromLayer: v1.layer)        let clickLayer = ly3.hitTest(p1!)        print(ly3.frame)        if(clickLayer == ly3){            let alert = UIAlertVIEw(Title: "点击了",message: "第三个被点击了",delegate: nil,cancelbuttonTitle: "OK")            alert.show()        }        let anolayer = ly4.hitTest(p1!)        if(anolayer == ly4){            let alert = UIAlertVIEw(Title: "点击了",message: "点击了小鸟",cancelbuttonTitle: "OK")            alert.show()        }

这个方法方便多了,代码量少多了 , 以后就用这个了。。。
看看效果

contensRect

前面讲过者个属性是用来裁剪图片的 , 用一个示例来看看这个属性的用法

这个图

先在界面上拖写vIEw

拖到控制器

@IBOutlet var digitVIEws: [UIVIEw]!

一个数组 。

img = UIImage(named: "sz")!        for item in digitVIEws{            item.layer.contents = UIImage(named: "sz")!.CGImage            item.layer.contentsRect = CGRectMake(0,0.1,1.0);            item.layer.contentsGravity = kCAGravityResizeAspect;        }       let timer = NSTimer.scheduledTimerWithTimeInterval(1.0,target: self,selector: "showTime",userInfo: nil,repeats: true)timer.fire()
func showTime(){        let calendar = NSCalendar.currentCalendar()//        let unitFlags =        let comp = calendar.components(NSCalendarUnit.Second,fromDate: NSDate())        setDigit(comp.second%10,ly: digitVIEws[0])        setDigit(comp.second/10,ly: digitVIEws[1])        let comp1 = calendar.components(NSCalendarUnit.Minute,fromDate: NSDate())        setDigit(comp1.minute%10,ly: digitVIEws[2])        setDigit(comp1.minute/10,ly: digitVIEws[3])        let comp2 = calendar.components(NSCalendarUnit.Hour,fromDate: NSDate())        setDigit(comp2.hour%10,ly: digitVIEws[4])        setDigit(comp2.hour/10,ly: digitVIEws[5])    }
func setDigit(t:Int,ly:UIVIEw){        ly.layer.contentsRect = CGRectMake(0.1*CGfloat(t),1);    }

效果大家也看到了 , 就是上面图下面的那个电子表

源代码:https://github.com/smalldu/SwiftStudy

总结

以上是内存溢出为你收集整理的swift详解之二十六-----------CALayer 判断是否点击hitTest 和 contensRect全部内容,希望文章能够帮你解决swift详解之二十六-----------CALayer 判断是否点击hitTest 和 contensRect所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1084774.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存