Ger*_*eri 98 iphone objective-c calayer uiview ios
我有一个在其图层中添加了UIView
大约8个不同的CALayer
子图层.如果我修改视图的边界(动画),那么视图本身会缩小(我用a检查过backgroundColor
),但是子图层的大小保持不变.
怎么解决这个?
Cha*_*ood 142
我使用的是Solin使用的相同方法,但该代码中存在拼写错误.方法应该是:
- (void)layoutSubviews {
[super layoutSubviews];
// resize your layers based on the view's new bounds
mylayer.frame = self.bounds;
}
Run Code Online (Sandbox Code Playgroud)
出于我的目的,我一直希望子图层是父视图的完整大小.将该方法放在视图类中.
Ole*_*ann 25
由于iPhone上的CALayer不支持布局管理器,我认为您必须使视图的主层成为自定义CALayer子类,您可以在其中覆盖layoutSublayers
以设置所有子图层的帧.您还必须覆盖视图的+layerClass
方法以返回新CALayer子类的类.
Run*_*ara 12
我在UIView中使用过这个.
-(void)layoutSublayersOfLayer:(CALayer *)layer
{
if (layer == self.layer)
{
_anySubLayer.frame = layer.bounds;
}
super.layoutSublayersOfLayer(layer)
}
Run Code Online (Sandbox Code Playgroud)
适合我.
我有同样的问题.在自定义视图的图层中,我添加了两个子图层.为了调整子图层的大小(每次自定义视图的边界发生变化),我实现了layoutSubviews
自定义视图的方法; 在这个方法中,我只是更新每个子层的帧以匹配我的子视图层的当前边界.
像这样的东西:
-(void)layoutSubviews{
//keep the same origin, just update the width and height
if(sublayer1!=nil){
sublayer1.frame = self.layer.bounds;
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题的字面答案:
是好是坏
needsDisplayOnBoundsChange
在中默认为false CALayer
。
解,
class CircularGradientViewLayer: CALayer {
override init() {
super.init()
needsDisplayOnBoundsChange = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override open func draw(in ctx: CGContext) {
go crazy drawing in .bounds
}
}
Run Code Online (Sandbox Code Playgroud)
确实,我指导您进行此质量检查
这说明了关键contentsScale
设置到底是做什么的;您通常需要在设置needsDisplayOnBoundsChange时同样地进行设置。
小智 5
斯威夫特 3 版本
在自定义单元格中,添加以下行
先申报
let gradientLayer: CAGradientLayer = CAGradientLayer()
Run Code Online (Sandbox Code Playgroud)
然后添加以下几行
override func layoutSubviews() {
gradientLayer.frame = self.YourCustomView.bounds
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
71138 次 |
最近记录: |