2011-12-13 2 views
2

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

// 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];. Я не могу понять, как это возможно. Для меня было бы намного больше смысла, если бы обработка не удалась, когда изображение не отображалось.

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

ответ

7

Проблема заключается в том, что при установке image собственности на уже init'd UIImageView, размер кадра не обновляется, чтобы соответствовать новому размеру изображения (в отличие от initWithImage:).

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

Установка свойства изображения не меняет размер 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];  
+0

Спасибо за совет! –

+0

Комментарий к нисходящей линии будет приятным. – occulus

2

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

UIImageView* test = [[UIImageView alloc] init]; 
[test setFrame:CGRectMake(0, 0, 100, 100)]; 
Смежные вопросы