Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 旋转后如何调整CAGradientLayer的大小?_Ios_Objective C_Cocoa Touch_Cocoa_Cagradientlayer - Fatal编程技术网

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!)和解决方案。做得好。包含的链接使解释超级简单!谢谢你,罗布!