ios - 我的 UIImage 已加载但未出现在屏幕上

标签 ios objective-c uiimageview uiimage

我正在编写一个通过不同条件更改图像的应用程序。当我调试所有设置但我没有在我的屏幕上看到图像。有人可以帮我吗?

-(void)setLuminanceImageSource

{
    self.luminanceImageView.image = nil;
    UIImage *image;
    switch (self.luminanceImageSource) {
        case FULL_LIGHT:
            image = [UIImage imageNamed:@"belichting-goed"];
            [self.luminanceImageView setImage:image];
            NSLog(@"full");
            break;
        case HALF_LIGHT:
            image = [UIImage imageNamed:@"belichting-matig"];
            [self.luminanceImageView setImage:image];
            NSLog(@"half");
            break;
        case BAD_LIGHT:
            image= [UIImage imageNamed:@"belichting-slecht"];
            [self.luminanceImageView setImage:image];
            NSLog(@"bad");
            break;
        default:
            image = [UIImage imageNamed:@"belichting-goed"];
            break;
    }
    [self.luminanceImageView setImage:image];
    [self.luminanceImageView setNeedsDisplay];
    [self.view addSubview:self.luminanceImageView];
    [self.view bringSubviewToFront:self.luminanceImageView];
}

这是我控制图像的方法。我在 .xib 文件中有一个 UIImageView,当我运行应用程序时,我看到了我在属性检查器中选择的图像,但是当调用此方法时它会消失。

编辑:我已将名称更改为常规命名样式。

这是我的调试控制台,图像对象不是 nil 而是 luminanceImageViewnil .
debug-console

我创建了一个 github 存储库,我在其中克隆了我的项目,以便您可以看到我的代码。
CameraApp repository
唯一不同的是 luminaceImageView 的位置,现在它位于屏幕中间,所以我可以确定它在设备的视野中。

最佳答案

你说:

the image object is not nil but the luminanceImageView stays nil.



当然,您需要先创建 ImageView ,然后才能设置其图像。在您的情况下,最简单的可能是一次性创建并设置其图像,然后将其添加到您的 View 中:
self.luminanceImageView = [[UIImageView alloc] initWithImage:image];
[self.view addSubview:self.luminanceImageView];

编辑(在查看 GitHub 之后):
您当前设置的 View 是这样的:
self.luminanceImageView = [[UIImageView alloc] init];
[self.luminanceImageView setImage:image];

这意味着如果你在 xib 中设置它(我没有检查过),那么你在这里覆盖它。
这样做存在三个问题:
  • 仍然需要将luminanceImageView 添加到您的 View 中,因为我
    上面已经说过
  • 普通的 init 创建一个 imageView
    大小 (0, 0)。这与 initWithImage: 不同,它创建一个具有图像大小的 imageView。
  • setImage: 不调整 imageView 的大小。来自
    UIWebView documentation :

  • Setting the image property does not change the size of a UIImageView. Call sizeToFit to adjust the size of the view to match the image.



    如果您在 XIB 中正确设置了 imageView 及其大小,则忽略其他所有内容,只需执行以下操作:
    [self.luminanceImageView setImage:image];
    

    如果大小不正确,请按照以下步骤操作:
    [self.luminanceImageView sizeToFit];
    

    编辑(调试代码后):

    您的问题是您从后台线程设置图像。 iOS 中几乎所有的 View 操作都需要在主线程中完成。这样做可以解决您的问题:
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.luminanceImageView setImage:image];
        [self.view bringSubviewToFront:self.luminanceImageView];
    });
    

    顺便说一句,您还可以更改代码中的 self.layer。这可能不是一个好主意,可能会导致以后出现问题。为相机使用单独的 View ,并使用 [cameraView.layer addSublayer:newLayer] 来解决这个问题。

    关于ios - 我的 UIImage 已加载但未出现在屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704159/

    相关文章:

    ios - 关于iOS版GoogleMaps SDK许可

    仅 iOS 纵向应用程序从横向的 UIWebview youtube 返回

    iphone - 如何在新 View 类中的不同线程上加载 UIWebview?在调用对象的 presentModalViewController 之前?

    objective-c - "live in the heap"是什么意思?

    iphone - 对于旋转的 UIImageView 有什么快速而肮脏的抗锯齿技术吗?

    ios - 在 Open ES iPhone 应用程序中围绕 VBO 使用 VAO 在调用 glDrawElements 时导致 EXC_BAD_ACCESS

    ios - 签署由其他开发者创建的 iOS 应用程序

    objective-c - UIImageView - 固定宽度和灵活高度?

    ios - MPRemoteCommandCenter 暂停/播放按钮不切换?

    ios - 在tableview ios6.1中加载图像