mem*_*ons 13 cocoa cocoa-touch objective-c ios cagradientlayer
我正在添加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];
Run Code Online (Sandbox Code Playgroud)
rob*_*off 31
以下是解决问题的两种不同方法.
创建gradientLayer一个实例变量而不是局部变量.然后,layoutSubviews在视图类中覆盖以设置渐变图层的框架:
- (void)layoutSubviews {
[super layoutSubviews];
_gradientLayer.frame = self.bounds;
}
Run Code Online (Sandbox Code Playgroud)创建一个UIViewnamed 的子类GradientView,并覆盖其+layerClass返回的方法[CAGradientLayer class].使用此视图绘制渐变而不是直接使用图层.然后设置渐变视图autoresizingMask(如果使用自动布局,则为其添加约束). 请参阅此答案以获取示例.
创建GradientView类也会使旋转期间的大小调整正确,所以我建议使用该解决方案.
| 归档时间: |
|
| 查看次数: |
12367 次 |
| 最近记录: |