zoukankan      html  css  js  c++  java
  • CALayer not resizing with Autolayout

    1. 问题描述:

    在一个添加了autolayout的UIView上 添加一个CALayer对象,当旋转后,这个CALayer并不会跟随UIView进行重新布局

    2. 原因

    UIVIew只会重新布局默认的layer,而不会自动重新布局 sublayers

    3. 解决

    3.1 在重新布局后重新设置layer的大小

    3.1.1 UIViewController的viewDidLayoutSubviews

    最简单粗糙的就是在UIViewController 的 viewDidLayoutSubviews中重新布局所有的layer。

    这种方法当然有问题,

    • 问题1:我们都知道,在横竖屏切换的时候,IOS会自动生成一个动画,如果用粗糙的解决方案,只是在动画结束后改变了frame,动画的过程中仍然能够看淡空白

    • 问题2:一般vc都会多次调用viewDidLayoutSubviews,这样做既不方便,也不美观,还可能影响效率

    3.1.2 UIView的layoutSubviews

    或者 CALayer的 layoutSublayers

    也就是在这继承这个方法,在这个方法里 重新布局子layout

    3.2 为目标CALayer包装上个UIView

    定义一个view,把他的layer的class设置为CAGradientClass(我们原来想要添加的CALayer对象),再将这个view添加到原先的UIView就好了

    #import 
    @interface BackgrundView : UIView
    @end
    
    #import BackgrundView.h
    @interface BackgrundView()
    -----------------------
    @end
    @implementation BackgrundView
    
    +(Class)layerClass{
    	return [CAGradientLayer class];
    }
    
    @end
  • 相关阅读:
    UIScrollView
    xcode debug
    ios 开发小技巧
    xcode调试
    Objective-C的反射机制
    git 命令
    iOS block的一些理解
    iOS 开发常用宏
    iOS 常用函数
    转:支付宝系统架构(内部架构图)
  • 原文地址:https://www.cnblogs.com/sunyanyan/p/5391323.html
Copyright © 2011-2022 走看看