我为自定义视图添加了一个CALayer,代码是
hostedGraphLayer.frame = self.layer.bounds;
[self.layer addSublayer:hostedGraphLayer];
当设备方向改变时,视图的图层的子图层也会旋转,但它不会相对于视图自动调整大小。 Layer不具有iOS的自动调整属性。
stackOverFlow中已有的答案之一是CALayers didn't get resized on its UIView's bounds change. Why?在这种情况下设置图层的设备方向改变,图层不会相对于其在旋转开始和结束之间的视图自动调整,这可以在模拟器中清楚地看到切换慢动画。
是否有任何修复“当视图旋转时,它的图层也会旋转,它应该调整其视图的大小。”
答案 0 :(得分:1)
没有没有内置修复,
你必须改变它的框架。
如果我错了,请纠正我。答案 1 :(得分:0)
在视图属性检查器中,将视图模式设置为重绘
内容将不再适应或对齐甚至拉伸,而是沿着动画呈现。
真正发生的是它渲染到最终位置,并且渲染在动画期间被拉伸,但这对于用户来说几乎是不可见的:)
上面的技巧会在视图的帧更改上调用背景图层上的setNeedsDisplay
view.layer
,但是由您来更新其子项。 setNeedsDisplay
图层不会传播到子图层
这些子图层也不会像视图一样自动调整
如果您确实需要这种行为,请改用视图,或者通过覆盖父图层的setNeedsDisplay
方法强制重绘自己。
-(void)setNeedsDisplay
{
[super setNeedsDisplay];
for (CALayer *sublayer in self.sublayers) {
[sublayer setNeedsDisplay];
}
}
这完全取决于您需要重绘的内容/方式。
如果您确实想要将图层用作与视图框架匹配的背景图层,请将UIView子类化并覆盖其类方法+(Class)layerClass
以返回图层类。
+(Class)layerClass
{
return [MyCustomLayer class];
}
它会将您的自定义图层用作默认背景图层
它非常强大;)我到处使用它
不要忘记Redraw
属性!