UIImageView отображается только когда я вызываю initWithImage - PullRequest
2 голосов
/ 14 декабря 2011

По какой-то причине я могу отображать 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];, ivw и ivh имеют допустимые значения, и изображение отображается.Однако, если я изменю реализацию на это:

// 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;, значения ivw и ivh оба равны нулю, и изображение не отображается, но последующееобработка на изображении все еще точна.В обоих случаях отправляю изображение на обработку, используя [self doRecognizeImage:self.imageView.image];.Я не могу понять, как это возможно.Для меня было бы намного больше смысла, если обработка не удалась, когда изображение не могло быть показано.

Идеи?Благодарю.

Ответы [ 2 ]

7 голосов
/ 14 декабря 2011

Проблема в том, что когда вы устанавливаете свойство image для уже инициализированного UIImageView, размер кадра не обновляется, чтобы соответствовать новому размеру изображения (в отличие от initWithImage:).

Всякий раз, когда у вас возникает такая проблема, всегда стоит проверить документы на случай, если вы что-то пропустили:

Установка свойства изображения не меняет размер 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];     
2 голосов
/ 14 декабря 2011

Возможно, размер вашего изображения не изменяется для изображения, поэтому вы загружаете изображение в UIImageView с рамкой нулевого размера. Попробуйте вручную установить рамку вида изображения на другое значение. Что-то вроде:

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