2016-12-07 58 views
0

在我viewDidLoad中正确设置我打电话方法:CAGradient层向上移动在iPhone 6S加,而在iPhone 5

[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向上移动的问题?

+0

这是一个有趣的狗! :) –

+0

@邓肯和名称是老虎;) – crypt

+0

你使用imageview的autolayout?你正在展示的功能何时被调用? – Maurice

回答

2

在viewDidLoad中,视图尚未调整到特定设备的大小。因此,你的渐变框架将会出错。

您应该调用取决于viewWillAppear中正确布局的代码,并且还应该在viewDidLayoutSubviews方法中调整它们。

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

+0

谢谢,这为我工作。 @Jerry提供的链接也很有帮助。所以我的最终解决方案是邓肯和杰瑞的解决方案的组合。 – crypt

1

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

+1

与此问题类似:http://stackoverflow.com/questions/29111099/calayer-not-resizing-with-autolayout – Jerry