我正在编写一个通过不同条件更改图像的应用程序。当我调试所有设置但我没有在我的屏幕上看到图像。有人可以帮我吗?
-(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 而是
luminanceImageView
留 nil
.我创建了一个 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 中设置它(我没有检查过),那么你在这里覆盖它。
这样做存在三个问题:
上面已经说过
大小 (0, 0)。这与 initWithImage: 不同,它创建一个具有图像大小的 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/