Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 导航到其他视图-pushViewController_Iphone_Objective C - Fatal编程技术网

Iphone 导航到其他视图-pushViewController

Iphone 导航到其他视图-pushViewController,iphone,objective-c,Iphone,Objective C,我有一个tableview,当我点击一行时,它会导航到另一个视图;导航部分的代码如下所示 ShowImageController *showImageController = [[HowItWorksViewController alloc] initWithNibName:nil bundle:nil]; [self.navigationController pushViewController:showImageController animated:YES]; 另一个视图包含一个图像

我有一个tableview,当我点击一行时,它会导航到另一个视图;导航部分的代码如下所示

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听起来不太大,但是我看不出还有什么问题,除了你看到的问题。在我的答案中尝试我的代码,看看它是否有帮助,将其加载到背景线程中。这不是图像大小。您是否从服务器获取任何外部数据?否,它不是来自服务器。我把图像保存在我的项目中,上面说参数很少,它指向
(调度队列优先级低),
。你知道怎么解决这个问题吗?