我有一个 UIImageView,其中包含一个相当大的图像(3 +/- MB),我将其插入以用作背景图像作为 subview ,如下所示:
- (void)viewDidLoad {
[super viewDidLoad];
[self.view insertSubview:imageView atIndex:0];
}
问题是当 View 被导航 Controller 推送时,过渡不平滑;它非常不稳定,因为(我假设)图像很大并且将其加载到 ImageView 中的成本很高。我以前用过
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"foobar"]];
但是因为图像太大,所以代码放大了图片,它只显示了很小的一部分,而且非常接近。
有更好/更有效的方法来做到这一点吗?
最佳答案
我尝试的是:首先调整图像大小,使其达到界面中实际的大小。为此,请使用其 drawInRect:
方法将图像重新绘制到图像上下文 (UIGraphicsBeginImageContextWithOptions
) 中。我的书中有很多关于此的信息:http://www.apeth.com/iOSBook/ch15.html
例如,要将图像缩小到其大小的一半:
UIImage* lin = [UIImage imageNamed: @"lin.png"];
CGSize s = lin.size;
CGFloat scale = 0.5;
s.width *= scale; s.height *= scale;
UIGraphicsBeginImageContextWithOptions(s, YES, 0);
[lin drawInRect:(CGRect){{0,0}, s}];
lin = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
此外,效率低下的根源可能在其他地方。使用模拟器中的新“调试”菜单来查找界面中绘制效率低下的其他内容。 WWDC 2011 有一个关于高效绘图的精彩视频。动画正是这些低效率表现出来的地方,所以我认为你走在正确的轨道上。
关于iphone - 插入 UIImageView 作为 subview 滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8626408/