簡體   English   中英

旋轉后如何調整CAGradientLayer的大小?

[英]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];

這是解決問題的兩種不同方法。

  1. gradientLayer為實例變量,而不是局部變量。 然后,在您的視圖類中覆蓋layoutSubviews以設置漸變層的框架:

     - (void)layoutSubviews { [super layoutSubviews]; _gradientLayer.frame = self.bounds; } 
  2. 創建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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM