UIImageview 上的渐变层在 iphone 6s 中向上移动,同时在 iphone 5 中正确设置
Posted
技术标签:
【中文标题】UIImageview 上的渐变层在 iphone 6s 中向上移动,同时在 iphone 5 中正确设置【英文标题】:CAGradient layer on UIImageview moving upwards in iphone 6s plus while setting correctly in iphone 5 【发布时间】:2016-12-07 13:44:05 【问题描述】:在我的 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 我得到这个输出:
在 iphone 6s plus 中得到这个输出:
如何解决iphone 6s plus中渐变向上移动的问题?
【问题讨论】:
那是一只长相很滑稽的狗! :) @Duncan,名字叫 Tiger ;) 您是否在图像视图中使用自动布局?您显示的函数何时调用? @ Maurice:是的,imageview 是使用自动布局设置的。 [self applyGradientOnDogImageView] 在 viewDidLoad 中被调用。 还有不寻常的老虎。 【参考方案1】:在 viewDidLoad 中,视图的大小尚未适合特定设备。因此,您的渐变框架将是错误的。
您应该在viewWillAppear
中调用取决于布局是否正确的代码,并且还应该在您的viewDidLayoutSubviews
方法中调整它们。
因此,不要从 viewDidLoad 调用您的 applyGradient 方法,而是从 viewWillAppear
调用它,并编写更新图层框架的代码并从 viewDidLayoutSubViews
调用 THAT。
【讨论】:
谢谢,这对我有用。 @Jerry 提供的链接也很有帮助。所以我的最终解决方案是混合了 Duncan 和 Jerry 的解决方案。【参考方案2】:您的图层创建后,图像正在调整大小,但图层没有。解决这个问题的最简单方法是创建一个包含图层的 UIView 子类。然后就可以响应大小变化,调整图层大小
【讨论】:
类似这个问题:***.com/questions/29111099/…以上是关于UIImageview 上的渐变层在 iphone 6s 中向上移动,同时在 iphone 5 中正确设置的主要内容,如果未能解决你的问题,请参考以下文章
在 UIImageView 上应用 CAGradient 层在上边缘和左边缘