热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

CALayer未在View中正确定位

如何解决《CALayer未在View中正确定位》经验,为你挑选了1个好方法。

上下文

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

在第3个演练页面中,我有一个自定义CALayer,在无限循环中动画一个圆圈.我想将该层添加到a 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(见下文).

CALayers放错了地方

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

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

图层正确放置

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

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



1> matt..:

viewDidLoad太早了.记住,viewDidLoad是早一点; 视图还没有在界面中,没有任何东西有其最终的大小/位置.如果您要将图层添加到view小视图的子图层而不是作为子视图的子图层,则必须稍后运行图层创建代码,以便获得正确的位置.viewDidAppear:或者viewDidLayoutSubviews是安全的 - 但当然你必须使用bool标志,这样你就不会做太多次了.

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


推荐阅读
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • 我一直都有记录信息的习惯,不知是从什么时候开始,大约是在工作后不久。如今还真有点庆幸从那时开始记了点东西,当然是电子版的,写 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 苹果8p电池多少毫安的_iphonexs电池多少毫安,iphonexs换电池多少钱
    使用iPhoneXS手机用户都反映XS的电池不耐用,同一系列的XR相比之下电池续航能力要强很多。iphonexs电池多少毫安,电池不耐用的原因有哪些&# ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
  • 苹果iPhone性能模式怎么开启_苹果开启iPhone电池性能优先功能方法一览
    苹果iphone性能模式怎么开启?相信很多用户对于这个功能还不是很清楚,那么iphone电池性能优先功能在哪里呢?下面小编为大家带来苹果开启iPhone电池性能优先功能方法一览,需 ... [详细]
author-avatar
石pimentel_958
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有