CALayer在视图中的位置不正确

坎杜布

语境

我正在使用这个简单的库为我的应用程序(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之外显示(请参见下文)。

CALayers放错了地方

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

同样令我感到困惑的是,当在iPhone 5模拟器上运行时,这些图层的外观完全符合我的期望(请参见下文)。

正确放置图层

我觉得我误解了这里工作中的一些概念。如何获得相同的定位?(类似于iPhone5 gif。)

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

马特

viewDidLoad还为时过早。记住,viewDidLoad还早。该视图尚未出现在界面中,没有任何东西具有其最终的大小/位置。如果要将图层添加到view小视图而不是作为小视图的子图层,则必须在以后运行图层创建代码,以便正确定位。viewDidAppear:viewDidLayoutSubviews将是安全的-但当然您必须使用bool标志,这样您才可以进行多次操作。

我个人不知道为什么您不将图层添加到小视图中。因此,您只需要设置pulse.frame = v.bounds一个子层并将其添加到v,而不是添加到您的view它解决了定位问题并获得了正确的关系。这样做是viewDidLoad可行的,因为当视图移动时,图层将随之移动。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

滚动视图中加载的视图大小不正确

来自分类Dev

集合视图中单元格的宽度不正确

来自分类Dev

计时器在列表视图中不正确

来自分类Dev

管理视图中的 Django ImageField url 不正确

来自分类Dev

CALayer上的边框显示不正确

来自分类Dev

appendChild位置不正确

来自分类Dev

JavaScript位置不正确

来自分类Dev

支架的位置不正确?

来自分类Dev

div位置不正确

来自分类Dev

textarea位置不正确

来自分类Dev

Android的位置不正确

来自分类Dev

标题位置不正确

来自分类Dev

CAShapeLayer的位置不正确

来自分类Dev

CAGradientLayer 位置不正确

来自分类Dev

以编程方式将根视图添加到视图控制器位置不正确

来自分类Dev

底图中的点绘制不正确

来自分类Dev

底图中的点绘制不正确

来自分类Dev

动态删除行后从视图中发布不正确的值

来自分类Dev

UITableViewCell中的CALayer阴影绘制不正确

来自分类Dev

UICollectionViewCell子视图大小不正确

来自分类Dev

NSStackView的视图间距不正确

来自分类Dev

渐变弧视图显示不正确

来自分类Dev

视图在iOS中显示不正确

来自分类Dev

设置了约束,但视图放置不正确

来自分类Dev

表视图显示不正确

来自分类Dev

列表视图行为不正确

来自分类Dev

UIScrollView 显示子视图不正确

来自分类Dev

Nib加载的子视图在iOS 8中的位置不正确

来自分类Dev

自定义UIButton的子视图位置不正确