Iphone 导航到其他视图-pushViewController
我有一个tableview,当我点击一行时,它会导航到另一个视图;导航部分的代码如下所示Iphone 导航到其他视图-pushViewController,iphone,objective-c,Iphone,Objective C,我有一个tableview,当我点击一行时,它会导航到另一个视图;导航部分的代码如下所示 ShowImageController *showImageController = [[HowItWorksViewController alloc] initWithNibName:nil bundle:nil]; [self.navigationController pushViewController:showImageController animated:YES]; 另一个视图包含一个图像
ShowImageController *showImageController = [[HowItWorksViewController alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:showImageController animated:YES];
另一个视图包含一个图像,我已将该图像添加到其viewDidLoad中。这是代码
UIImageView *imageView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"hello.png"]];
[imageView setFrame:CGRectMake(o, o, 200, 300)];
[[self view] addSubview:imageView ];
问题是,当我单击该行时,需要很长时间(非常慢)才能导航到另一个屏幕
注意:在其他视图中没有图像的行导航良好,没有问题。为什么会这样?我该如何修复它呢?听起来图像确实很大,因此需要一段时间才能加载。我建议您使用较小的图像,或者如果您无法控制它们,您可能希望尝试在后台加载图像。以下是一些在后台加载它们的代码:
- (void)decodeImageInBackgroundThread:(UIImage*)decodedImage forImageView:(UIImageView*)imageView {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
CGImageRef originalImage = [decodedImage CGImage];
CFDataRef imageData = CGDataProviderCopyData(CGImageGetDataProvider(originalImage));
CGDataProviderRef imageDataProvider = CGDataProviderCreateWithCFData(imageData);
if (imageData != NULL) {
CFRelease(imageData);
}
CGImageRef image = CGImageCreate(CGImageGetWidth(originalImage),
CGImageGetHeight(originalImage),
CGImageGetBitsPerComponent(originalImage),
CGImageGetBitsPerPixel(originalImage),
CGImageGetBytesPerRow(originalImage),
CGImageGetColorSpace(originalImage),
CGImageGetBitmapInfo(originalImage),
imageDataProvider,
CGImageGetDecode(originalImage),
CGImageGetShouldInterpolate(originalImage),
CGImageGetRenderingIntent(originalImage));
if (imageDataProvider != NULL) {
CGDataProviderRelease(imageDataProvider);
}
dispatch_async(dispatch_get_main_queue(), ^{
[imageView setImage:[UIImage imageWithCGImage:image]];
CGImageRelease(image);
});
});
}
然后您可以这样使用:
- (void)viewDidLoad {
...
UIImage *image = [UIImage imageNamed:@"hello.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:nil];
[imageView setFrame:CGRectMake(0.0f, 0.0f, 200.0f, 300.0f)];
[[self view] addSubview:imageView];
[self decodeImageInBackgroundThread:image forImageView:imageView];
}
尝试在asynk任务或nsoperationqueue:)中加载映像。这可能是由于映像的大小造成的。。在viewwillappearth中尝试相同的代码图像的大小是15kb15kb听起来不太大,但是我看不出还有什么问题,除了你看到的问题。在我的答案中尝试我的代码,看看它是否有帮助,将其加载到背景线程中。这不是图像大小。您是否从服务器获取任何外部数据?否,它不是来自服务器。我把图像保存在我的项目中,上面说参数很少,它指向
(调度队列优先级低),
。你知道怎么解决这个问题吗?