【问题标题】:How to optimize UIImageView如何优化 UIImageView
【发布时间】:2012-03-31 23:24:51
【问题描述】:

这是我的程序: 我有缓存变量@property (nonatomic, retain) NSMutableDictionary *cache;,用于存储我的 UIImageViews。图片尺寸为768 × 1024。

UIImageView *cap_1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"face1_cap_0.png"]];
    [self.cache setObject:cap_1 
                         forKey:@"cap_1"];
    [cap_1 release];

    UIImageView *cap_2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"face1_cap_1.png"]];
    [self.cache setObject:cap_2 
                         forKey:@"cap_2"];
    [cap_2 release];

    UIImageView *cap_3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"face1_cap_2.png"]];
    [self.cache setObject:cap_3 
                         forKey:@"cap_3"];
    [cap_3 release];

    UIImageView *cap_4 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"face1_cap_3.png"]];
    [self.cache setObject:cap_4 
                         forKey:@"cap_4"];
    [cap_4 release];

    UIImageView *cap_5 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"face1_cap_4.png"]];
    [self.cache setObject:cap_5 
                         forKey:@"cap_5"];
    [cap_5 release];

    UIImageView *cap_6 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"face1_cap_5.png"]];
    [self.cache setObject:cap_6 
                         forKey:@"cap_6"];
    [cap_6 release];

我在 PanGesture 中使用 UIImageViews,每滑动 50 pt 我在我的主视图上添加每个 UIImageView。我只在第一次滞后,然后在主视图上添加所有 UIImageViews,但在其他所有时间它工作得很快。如何优化第一次滑动?或者请告诉我另一种方法。

【问题讨论】:

  • 你什么时候初始化你的 UIImageViews ?他们在刷卡之前是否设置为另一个超级视图?
  • 不,他们没有,我只将它们存储在 NSMutableDictionary 中。

标签: ios ipad caching optimization uiimageview


【解决方案1】:

您应该将冗长的操作卸载到不同的线程,以免阻塞 UI。 以this article 为例。

【讨论】:

    【解决方案2】:

    您可以尝试在应用启动时加载它,这样用户第一次滑动时就不会意识到,但在这种情况下,整个应用将需要更长的时间才能打开。

    【讨论】:

    • - (void)viewDidLoad 方法中执行代码中的所有分配。但正如我之前提到的,它会减慢包含它的视图的加载时间。正如有人在另一个答案中提到的那样,您也可以在不同的线程中执行此操作,这样加载时间就不会增加太多。
    【解决方案3】:

    在视图加载后,您可以直接将图像添加到主视图,并将隐藏属性设置为 YES。然后,您只需在用户滑动时将其属性设置为 NO。

    编辑:

    另一种解决方案是制作一些缩略图用于显示,保留原始图像以供最终进一步的图像计算。

    【讨论】:

    • 谢谢,你知道其他方法吗?
    • 问题不在于加载图像,因为您正在缓存它们并且 imageNamed 方法也有一个缓存系统。所以我认为滞后来自 addSubView 方法。但我不认为从 UI 线程化它是一个好主意,因为它是关于 UI 渲染的。 1024x768 对于 iPhone 屏幕来说太大了。如果您调整图像大小,您应该创建并显示一些缩略图,保留原始图像以供处理。
    • 操作,不是 iPhone,而是 iPad。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2011-04-09
    • 2021-02-02
    相关资源
    最近更新 更多