我正在编写一个可以通过不同条件更改图像的应用。当我调试一切都设置但我没有看到我的屏幕上的图像。有人可以帮帮我吗?
-(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,当我运行应用程序时,我看到我在属性检查器中选择的图像,但是当调用此方法时它会消失。
编辑:我已将名称更改为传统的命名方式。这是我的调试控制台,图像对象不是零,但luminanceImageView
保持nil
。
我创建了一个github存储库,我克隆了我的项目,以便您可以看到我的代码。 CameraApp repository 唯一的区别是luminaceImageView的位置,现在它位于屏幕的中间,所以我可以确定它是在设备的视图。
答案 0 :(得分:0)
从您的代码中尝试此修改
-(void)setLuminanceImageSource
{
[self.sess stopRunning];
//[self.layer removeFromSuperlayer];
UIImage *image;
switch (self.luminanceImageSource) {
case FULL_LIGHT:
{
image = [UIImage imageNamed:@"belichting-goed.png"];
NSLog(@"full");
break;
}
case HALF_LIGHT:
{
image = [UIImage imageNamed:@"belichting-matig.png"];
NSLog(@"half");
break;
}
case BAD_LIGHT:
{
image= [UIImage imageNamed:@"belichting-slecht.png"];
NSLog(@"bad");
break;
}
default:
{
image = [UIImage imageNamed:@"belichting-goed.png"];
break;
}
}
[self.luminanceImageView setImage:image];
[self.layer addSublayer: self.luminanceImageView.layer];
//[self.view bringSubviewToFront:self.luminanceImageView];
// NSLog(@"%@", self.luminanceImageView.image);
// NSLog(@"lumi X:%f, Y:%f", self.luminanceImageView.frame.origin.x, self.luminanceImageView.frame.origin.y);
// NSLog(@"view X:%f, Y:%f",self.view.frame.origin.x, self.view.frame.origin.y);
// NSLog(@"window %@", self.view.window);
}
答案 1 :(得分:0)
你这么说:
图像对象不是nil,但brightnessImageView保持无效。
当然,您需要首先创建图像视图,然后才能设置图像。在您的情况下最简单的可能是创建它并一次设置其图像,然后将其添加到您的视图中:
self.luminanceImageView = [[UIImageView alloc] initWithImage:image];
[self.view addSubview:self.luminanceImageView];
编辑(在查看GitHub之后):
您目前设置了如下视图:
self.luminanceImageView = [[UIImageView alloc] init];
[self.luminanceImageView setImage:image];
这意味着如果你在xib中设置它(我没有检查过),那么你在这里覆盖它。 这有三个问题:
设置image属性不会改变UIImageView的大小。调用sizeToFit调整视图的大小以匹配图像。
如果您已在XIB中正确设置了imageView及其大小,那么请忽略其他所有内容,然后执行以下操作:
[self.luminanceImageView setImage:image];
如果尺寸不正确,请按照以下步骤操作:
[self.luminanceImageView sizeToFit];
编辑(调试代码后):
您的问题是您从后台线程设置图像。 iOS中的几乎所有视图操作都需要从主线程完成。这样做可以解决您的问题:
dispatch_async(dispatch_get_main_queue(), ^{
[self.luminanceImageView setImage:image];
[self.view bringSubviewToFront:self.luminanceImageView];
});
顺便说一下,您还可以在代码中更改self.layer。这可能不是一个好主意,可能会在以后导致问题。为相机使用单独的视图,并使用[cameraView.layer addSublayer:newLayer]来解决这个问题。