ios – CALayer未在View中正确定位

ios – CALayer未在View中正确定位,第1张

概述上下文 我正在使用this simple library为我的应用程序(TL; DR,水平分页视图控制器)进行介绍/演练.我目前有3页设置. 在第3个演练页面中,我有一个自定义CALayer,可以在无限循环中激活一个圆圈.我想将这个图层添加到UIView中,以便按照我想要的方式在IB中进行布局(通过自动布局). 在viewDidLoad(对于第3页)中,我创建了圆形图层并将其框架设置为与我定位的视 上下文

我正在使用this simple library为我的应用程序(TL; DR,水平分页视图控制器)进行介绍/演练.我目前有3页设置.

在第3个演练页面中,我有一个自定义CALayer,可以在无限循环中激活一个圆圈.我想将这个图层添加到UIVIEw中,以便按照我想要的方式在IB中进行布局(通过自动布局).

在vIEwDIDLoad(对于第3页)中,我创建了圆形图层并将其框架设置为与我定位的视图相同,假设圆形与视图位于同一位置:

for v:UIVIEw in [vIEw1!,vIEw2!] {        var pulse = pulseLayer()        pulse.frame = v.frame        pulse.cornerRadius = v.frame.wIDth / 2.0        pulse.masksToBounds = false        vIEw.layer.insertSublayer(pulse,above: v.layer)    }

问题

当我在iPhone 6模拟器中运行应用程序时,CALayers会显示他们的UIVIEws(见下文).

我立刻注意到的一件事是,图层不会以同样的方式放错位置 – 一个位于其视图上方,另一个位于左侧.我假设这与视图的约束有关,但我无法弄清楚如何解决它.

同样让我感到困惑的是,当在iPhone 5模拟器上运行时,图层看起来与我期望的完全一样(见下文).

我觉得我误解了一些在这里工作的概念.我怎样才能使定位行为相同? (就像iPhone5的GIF一样.)

或者,有没有更好的方法来做我想做的事情?

解决方法 vIEwDIDLoad太快了.请记住,vIEwDIDLoad是早期的;视图还没有在界面中,没有任何东西有其最终的大小/位置.如果您要添加要查看的图层而不是小视图的子图层,则必须稍后运行图层创建代码,以便获得正确的位置. vIEwDIDAppear:或vIEwDIDLayoutSubvIEws是安全的 – 但是当然你必须使用bool标志,所以你不要做太多次.

就个人而言,我不明白你为什么不在小视图中添加图层.所以你只需设置pulse.frame = v.bounds并添加为v的子图层,而不是视图.它解决了定位并获得了正确的关系.在vIEwDIDLoad中执行它会起作用,因为当视图移动时,图层会随之移动.

总结

以上是内存溢出为你收集整理的ios – CALayer未在View中正确定位全部内容,希望文章能够帮你解决ios – CALayer未在View中正确定位所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1012717.html

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

发表评论

登录后才能评论

评论列表(0条)

保存