UIImageview上的CAGradient图层在iphone 6s中向上移动,同时在iphone 5中正确设置

时间:2016-12-07 13:44:05

标签: ios objective-c uiimageview uikit cagradientlayer

在我的viewDidLoad中,我正在调用方法:

[self applyGradientOnDogImageView];

-(void)applyGradientOnDogImageView{

CAGradientLayer *gradient = [CAGradientLayer layer];

gradient.frame = CGRectMake(self.dogImageView.bounds.origin.x, self.dogImageView.bounds.origin.y+self.dogImageView.bounds.size.height/2, self.dogImageView.bounds.size.width, self.dogImageView.bounds.size.height/2);

gradient.colors = [NSArray arrayWithObjects:(__bridge id)[[UIColor clearColor] CGColor], (__bridge id)[[[UIColor blackColor] colorWithAlphaComponent:1.0] CGColor], nil];

[self.dogImageView.layer insertSublayer:gradient atIndex:0];

}

在iphone 5中我得到了这个输出:

enter image description here

在iphone 6s中加上获得此输出: enter image description here

如何解决iphone 6s plus中渐变向上移动的问题?

2 个答案:

答案 0 :(得分:2)

在viewDidLoad中,视图尚未根据特定设备调整大小。因此,渐变的框架将是错误的。

您应该在viewWillAppear中调用依赖于布局正确的代码,您还应该使用viewDidLayoutSubviews方法调整它们。

因此,不是从viewDidLoad调用applyGradient方法,而是从viewWillAppear调用它,并编写更新图层框架的代码并从viewDidLayoutSubViews调用THAT。

答案 1 :(得分:1)

在创建图层后调整图像大小,但图层不是。解决这个问题的最简单方法是创建一个包含图层的UIView子类。然后,您可以响应大小更改并调整图层大小