我的图片视图动画有很大的延迟。
我正在创建基于导航的应用程序。
在我的第三个视图控制器的viewDidLoad中,我创建了一个图像视图并将其添加为子视图。
self.myImageView = [[UIImageView alloc]initWithFrame:CGRectMake(259, 46, 496, 470)];
self.myImageView.image = [UIImage imageNamed:@"foo.png"];
[self.view addSubview:self.myImageView];
并在按钮上单击我想将myImageView从一个动画切换到另一个动画。
有两个动画数组的图像,我在viewDidLoad中初始化但是在调用[self.myImageView startAnimating]时需要一些延迟;这是第一次。
在我的按钮上单击我动画我的图像视图,如下所示:
self.myImageView.animationImages = self.openAnimationArray;
[self.myImageView startAnimating];
self.myImageView.animationRepeatCount = 0;
在下一个按钮上按下i,使用另一组图像阵列为相同的ImageView设置动画。
self.myImageView.animationImages = self.closeAnimationArray;
[self.myImageView startAnimating];
self.myImageView.animationRepeatCount = 0;
我的第一个问题是导航到我的第三个视图控制器时的延迟。为了避免这种延迟,我初始化并在app Delegate [UIApplication sharedApplication] .delegate中存储了closeAnimationArray和openAnimationArray。
我只在第一次导航到第三个视图控制器时遇到此延迟。我认为这可能是由于图像的缓存,第二次导航没有延迟.UIImage imageNamed函数缓存图像。 因此,为了避免首次导航的延迟,我强制加载来自应用程序代表本身的图像。
NSArray * openAnimationArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.png"],[UIImage imageNamed:@"2.png"],[UIImage imageNamed:@"3.png"],[UIImage imageNamed:@"4.png"],[UIImage imageNamed:@"5.png"], nil];
for (id object in openAnimationArray)
{
[object forceLoad];
}
强制加载的方法如下:
- (void) forceLoad
{
const CGImageRef cgImage = [self CGImage];
const int width = CGImageGetWidth(cgImage);
const int height = CGImageGetHeight(cgImage);
const CGColorSpaceRef colorspace = CGImageGetColorSpace(cgImage);
const CGContextRef context = CGBitmapContextCreate(
NULL,
width, height,
8, width * 4,
colorspace, kCGImageAlphaNoneSkipFirst);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);
CGContextRelease(context);
}
但是第一次动画仍然存在延迟。它会严重影响我的应用程序性能。我该如何解决这个问题。
答案 0 :(得分:0)
试试这个:
NSArray * openAnimationArray = [NSArray arrayWithObjects:[UIImage initWithContentsOfFile:@"1.png"],[UIImage initWithContentsOfFile:@"2.png"],[UIImage initWithContentsOfFile:@"3.png"],[UIImage initWithContentsOfFile:@"4.png"],[UIImage initWithContentsOfFile:@"5.png"], nil];
UIImage initWithContentsOfFile:@"2.png"]
比[UIImage imageNamed:@"2.png"]
快。因为它加载没有缓存的图像。