[英]How to resize a CAGradientLayer after rotation?
我要在視圖中添加一個CAGradientLayer
。 當視圖自動調整大小時(例如旋轉后),漸變層不會調整大小。 可以將漸變設置為自動調整為與視圖相同嗎? 還要注意,我在視圖中使用自動布局約束。
這是我在做什么:
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = CGRectMake(0.0, 0.0, frame.size.width, frame.size.height);
gradientLayer.colors = [NSArray arrayWithObjects:
(id)[[UIColor colorWithRed:255.0/255.0f green:255.0/255.0f blue:255.0/255.0f alpha:1.0f] CGColor],
(id)[[UIColor colorWithRed:233.0/255.0f green:233.0/255.0f blue:233.0/255.0f alpha:1.0f] CGColor], nil];
[self.layer insertSublayer:gradientLayer atIndex:0];
這是解決問題的兩種不同方法。
將gradientLayer
為實例變量,而不是局部變量。 然后,在您的視圖類中覆蓋layoutSubviews
以設置漸變層的框架:
- (void)layoutSubviews { [super layoutSubviews]; _gradientLayer.frame = self.bounds; }
創建UIView
的子類GradientView
,並重寫其+layerClass
方法以返回[CAGradientLayer class]
。 使用此視圖繪制漸變,而不是直接使用圖層。 然后設置漸變視圖的autoresizingMask
(如果使用自動布局,則autoresizingMask
添加約束)。 有關示例, 請參見此答案 。
創建GradientView
類還將使調整大小在旋轉過程中正確執行,因此我建議采用該解決方案。
我通過覆蓋視圖的setFrame:
方法來手動調整圖層邊界的大小:
-(void)setFrame:(CGRect)frame
{
[super setFrame:frame];
_gradientLayer.bounds = CGRectMake(0, 0, CGRectGetWidth(frame), CGRectGetHeight(frame));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.