【问题标题】:Inserting UIImageView as subview lag插入 UIImageView 作为子视图滞后
【发布时间】:2011-12-24 19:15:24
【问题描述】:

我有一个 UIImageView,其中包含一个非常大的图像 (3 +/- MB),我将其插入以用作背景图像作为子视图,如下所示:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view insertSubview:imageView atIndex:0];
}

问题是当视图被导航控制器推送时,过渡不平滑;它非常不稳定,因为(我假设)图像很大并且将其加载到图像视图中很昂贵。我以前用过

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"foobar"]];

但是因为图片太大,那段代码把图片放大了,只显示了很小的一部分,而且非常近。

有没有更好/更有效的方法来做这件事?

【问题讨论】:

    标签: iphone ios uinavigationcontroller uiimageview uiimage


    【解决方案1】:

    我要尝试的是:首先调整图像的大小,使其成为界面中实际的大小。为此,请使用其 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();
    

    此外,效率低下的根源可能在其他地方。使用模拟器中的新 Debug 菜单来查找在您的界面中低效绘制的其他内容。有一个很好的 WWDC 2011 视频有效地绘图。动画正是这些低效率表现出来的地方,所以我认为你在正确的轨道上。

    【讨论】:

    • 我知道 imageView 是问题所在,因为注释掉 [self.view insertSubview:imageView atIndex:0] 行可以消除滞后。
    • 图像,也许 - 不是 imageView。 UIImageView 是一种非常有效的图像绘制方式;不需要其他方式,这正是 UIImageView 的用途。
    • 我正在阅读你书中关于图形上下文的章节,但我很迷茫。如何使用 UIGraphicsBeginImageContextWithOptions 来缩放图像?
    【解决方案2】:

    要解决这个“但是因为图像太大,那段代码放大了图片,它只显示了很小的一部分,而且非常接近。”,您可以使用 setFrame 方法设置 UIImageView 的框架像这样:

    [yourImageView setFrame:CGRectMake(0,0,xWidth, yHeight)];
    

    如果 yourImageView 在 vi​​ewcontroller 的视图之上,你可以这样做:

    [yourViewController.yourImageView setFrame:CGRectMake(0,0,yourViewController.view.frame.size.width, yourViewController.view.frame.size.height)];
    

    【讨论】:

      【解决方案3】:

      最后对我有用的是在 MainWindow.xib 中创建一个 UIImageView 并将其设置为图像,这样就不必在每次视图更改时加载和卸载它,并提供应用一些连续性。感谢您的帮助!

      【讨论】:

        猜你喜欢
        • 2011-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多