热门标签 | 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会有效,因为当视图移动时,图层会随之移动.


推荐阅读
  • 使用Swift 2.2创建我的第一个Xcode应用
    本文将指导您如何使用Xcode 6搭建并运行一个简单的iOS应用程序。从启动Xcode到执行首个应用,每个步骤都将详细介绍。 ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Android 开发中 layout_gravity 属性的使用方法及其在不同布局下的效果,旨在帮助开发者更好地理解和利用这一属性来精确控制视图的布局。 ... [详细]
  • 本文探讨了一个场景:用户成功登录后,如何确保Master-Detail视图控制器以模态形式展示。 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • 本文探讨了在iOS项目中导入MKNetworkKit库时遇到的常见问题及其解决方案。 ... [详细]
  • 深入解析Android中的SQLite数据库使用
    本文详细介绍了如何在Android应用中使用SQLite数据库进行数据存储。通过自定义类继承SQLiteOpenHelper,实现数据库的创建与版本管理,并提供了具体的学生信息管理示例代码。 ... [详细]
  • 实现‘点击恢复’功能 - Tap-to-Resume Feature in SpriteKit
    了解如何在应用程序从非活动状态返回时,在SpriteKit游戏中添加一个‘点击恢复’的文字提示。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本文探讨了在iOS应用中实现类似Android Snack Bar功能的方法,并特别关注如何确保Snack Bar正确显示在键盘下方。 ... [详细]
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社区 版权所有