Iphone UIImageView是否有属性指示setImage已完成且动画已准备就绪?

Iphone UIImageView是否有属性指示setImage已完成且动画已准备就绪?,iphone,objective-c,ios4,uiimageview,Iphone,Objective C,Ios4,Uiimageview,刚刚开始使用Obj-C和iOS编程。我有一些代码可以将imageView加载到(HIDDEN:YES)UIView中-很简单 [bgImageView setImage:[UIImage imageNamed:@"Filename.jpg"]; 然后,代码在fgImageView和bgImageView上设置并提交动画。 由于某些图像可能较大,因此新bgImage中的动画有时不会与其中的新背景图像一起渲染,而是“暂停并显示”。请注意,在setImage期间不会发生失速。它发生在代码后面的第二个

刚刚开始使用Obj-C和iOS编程。我有一些代码可以将imageView加载到(HIDDEN:YES)UIView中-很简单

[bgImageView setImage:[UIImage imageNamed:@"Filename.jpg"];
然后,代码在fgImageView和bgImageView上设置并提交动画。 由于某些图像可能较大,因此新bgImage中的动画有时不会与其中的新背景图像一起渲染,而是“暂停并显示”。请注意,在setImage期间不会发生失速。它发生在代码后面的第二个animationCommit期间。因为animationCommit强制应用程序等待此ImageView的动画完成

我要找的是UIImageView上的“setImage提交”

我更希望在加载图像之前显示一个微调器,然后继续动画,但是UIImageView类似乎没有isLoaded属性


有没有一种简单的方法可以确定UIImageView是通过setImage调用完成的?

我的直觉是setImage是同步处理的,特别是在你谈到应用程序如何暂停时。您可能希望在NSOperation中运行setImage,以允许在后台发生这种情况


然后,您将处理KVO操作并在那里处理卸下微调器的操作。

UIImageView
-(BOOL)中有一种方法正在进行动画化,因此您可以潜在地使用:

if (![bgImageView isAnimating]) {
    // continue to next image;
}

这就足够了,还是正在进行的其他动画会给出错误的响应?

[UIImageView setImage:]
不是异步的:它是在消息返回之前立即完成的。如果视图没有立即显示图像,可能是因为某些懒惰的UIImage代码。我的猜测是,
[UIImage imageNamed::][/code>只是引用捆绑包中的文件,并仅在请求图像数据后加载它

您可以尝试通过发送CGImage消息来强制加载图像:

[bgImageView.image CGImage];
如果仍无法触发加载图像,则必须将其绘制到某个位置:

UIGraphicsBeginImageContext((CGSize){1, 1});
[bgImageView drawInRect:(CGRect){{0, 0}, {1, 1}}];
UIGraphicsEndImageContext();

应用程序不会暂停-bgimage上的animationcommit会暂停-但setimage和animationcommit之间的代码会运行(例如,fgimage动画完成后会暂停,即7行代码之后),事实上,如果它暂停,这会更好-setImage似乎正在加载和缩放背景线程中的图像。我正在尝试确定背景线程已完成,uiimageview已准备好进行动画制作。更重要的是,它似乎是同步加载setImage,但uiimageview异步缩放图像……我相信这就是关键所在。我已经尝试过这一点,无效-iAnimating显然无法识别uiimageview仍在忙着在背景中缩放图像。听到这个消息我很难过。这有点混乱,但是可以用
-(void)setImage:(UIImage*)image{[super-setImage:image];//您的自定义代码;}
覆盖
setImage:
方法。更糟糕的是,你可以在其中包含一个通知,发送到主线程,让它知道它可以继续到下一个图像,我确实可以这样做,如果我有任何方法知道图像何时完成缩放/加载-但问题仍然存在。我非常感谢您的帮助-但是//您的自定义代码块仍然是一个问题-我如何知道图像确实准备好进行动画制作?在为您查看了几乎所有可能的搜索字段后,我无法找到一个答案来查找图像是否确实已缩放和加载。然而,我确实发现了一个链接,如果它适合您的情况,它可能会证明是有用的。基本上,它表示UIImageView并不用于保存大型图像,并提供了调整图像大小的方法以避免出现问题(而不会破坏原始图像的质量)。如果不是这样的话,我会继续环顾四周谢谢你的努力,slev-我会牢记这一建议,而不是直接在视图中使用UIImage ImageName,我会根据你的帖子引用的[link]()调整图像大小。这样一来,UIImageView将不会处理疯狂的大文件本身,而是一个适当缩放的版本,当它需要设置动画时。bImageView不会响应drawInRect,但bImageView.image会响应。不幸的是,这两个代码块似乎都没有强制同步等待映像真正就绪/缩放/加载。虽然映像可能已加载(可能尚未完成缩放),但映像的大小为1.5MB。
UIGraphicsBeginImageContext((CGSize){1, 1});
[bgImageView drawInRect:(CGRect){{0, 0}, {1, 1}}];
UIGraphicsEndImageContext();