Ios 旋转后如何调整CAGradientLayer的大小?
我正在向视图中添加一个Ios 旋转后如何调整CAGradientLayer的大小?,ios,objective-c,cocoa-touch,cocoa,cagradientlayer,Ios,Objective C,Cocoa Touch,Cocoa,Cagradientlayer,我正在向视图中添加一个CAGradientLayer。当视图自动调整大小(例如旋转后)时,渐变层不会调整大小。可以将渐变设置为与视图相同的自动调整大小吗?还请注意,我正在视图中使用自动布局约束 以下是我正在做的: CAGradientLayer *gradientLayer = [CAGradientLayer layer]; gradientLayer.frame = CGRectMake(0.0, 0.0, frame.size.width, frame.size.heigh
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];
我通过覆盖视图的
setFrame:
方法手动调整层边界的大小:
-(void)setFrame:(CGRect)frame
{
[super setFrame:frame];
_gradientLayer.bounds = CGRectMake(0, 0, CGRectGetWidth(frame), CGRectGetHeight(frame));
}
这里有两种不同的方法来解决您的问题
gradientLayer
成为实例变量,而不是局部变量。然后,在视图类中覆盖layoutSubviews
,以设置渐变层的框架:
- (void)layoutSubviews {
[super layoutSubviews];
_gradientLayer.frame = self.bounds;
}
GradientView
的UIView
的子类,并重写其+layerClass
方法以返回[CAGradientLayer类]
。使用此视图绘制渐变,而不是直接使用图层。然后设置渐变视图的自动调整大小任务
(如果使用自动布局,则向其添加约束)。举个例子创建
GradientView
类还将使旋转期间的大小调整行为正确,因此我建议使用该解决方案。可能重复@CodaFi的问题略有不同。另外,虽然这个问题有一个公认的答案,但在这个案例中似乎没有用。你是对的,这个答案毫无价值。覆盖-layoutSubviews
并在其中分配帧。setFrame:
不幸的是,在诸如旋转之类的事件期间,不会调用此函数,因此这将不起作用。♡ 链接的答案。很好地解释了问题(使用动画gif!)和解决方案。做得好。包含的链接使解释超级简单!谢谢你,罗布!