UIImageView仅在我调用initWithImage时显示

时间:2011-12-13 22:44:23

标签: iphone objective-c xcode uiimageview uiimage

出于某种原因,我在每次迭代时使用不同的图像分配/初始化时只能显示UIImageView。奇怪的是我知道正在加载图像数据,因为我正在对图像运行处理并且处理按预期工作。简而言之,这是我尝试的两种方法:

// interface
@interface ViewController : UIViewController <UIAlertViewDelegate>
{

    UIImageView *imageView;

}

@property (nonatomic, retain) UIImageView *imageView;

@end

// implementation
@implementation ViewController

@synthesize imageView;

//...

- (void) loadAndDisplayImage {

    // Load testing image
    UIImage *testImg;
    testImg = [UIImage imageNamed:@"Test.png"];

    self.imageView = [[UIImageView alloc] initWithImage:testImg];

    //size of imageView rect
    CGRect frame = self.imageView.frame;
    int ivw = frame.size.width;
    int ivh = frame.size.height;

    //...

}

@end

当我使用此方法self.imageView = [[UIImageView alloc] initWithImage:testImg];时,ivwivh具有有效值并显示图像。但是,如果我将实现更改为:

// implementation
@implementation ViewController

@synthesize imageView;

//...

- (void) viewDidLoad {

    self.imageView = [[UIImageView alloc] init];
    [self loadAndDisplayImage];

}

- (void) loadAndDisplayImage {

    // Load testing image
    UIImage *testImg;
    testImg = [UIImage imageNamed:@"Test.png"];

    self.imageView.image = testImg;

    //size of imageView rect
    CGRect frame = self.imageView.frame;
    int ivw = frame.size.width;
    int ivh = frame.size.height;

    //...

}

@end

在使用self.imageView.image = testImg;设置图片的位置,值ivwivh均为零且未显示图像,但对图像的后续处理仍然准确。在这两种情况下,我都会使用[self doRecognizeImage:self.imageView.image];将图像发送到处理中。我无法弄清楚这是怎么可能的。如果在无法显示图像时处理失败,对我来说会更有意义。

想法?谢谢。

2 个答案:

答案 0 :(得分:7)

问题是,当您在已初始化的image上设置UIImageView属性时,不会更新帧大小以匹配新的图片大小(与initWithImage:不同)。

每当你遇到这样的问题时,如果你错过了某些内容,总是值得查看docs

  

设置image属性不会改变UIImageView的大小。   调用sizeToFit调整视图的大小以匹配图像。

因此,在设置图像属性后添加对sizeToFit的调用:

self.imageView.image = testImg;
[self.imageView sizeToFit];

作为旁注,当你写一个属性,而不是阅读它或调用一个方法时,我只会使用self.点符号。换句话说,你可以通过写作来逃避:

// we are not setting imageView itself here, only a property on it
imageView.image = testImg; 

// this is a method call, so "self." not needed
[imageView sizeToFit];     

答案 1 :(得分:2)

图像视图可能没有为图像调整大小,因此您将图像加载到具有零大小框架的UIImageView中。尝试手动将图像视图的框架设置为其他值。有点像:

UIImageView* test = [[UIImageView alloc] init];
[test setFrame:CGRectMake(0, 0, 100, 100)];