2012-04-18 7 views
0

Я сдаюсь. Кажется, что это не очень простое дело. Пожалуйста, помогите ...UIImage в UIImageVIew в UIScrollView

Я пытаюсь загрузить изображение с URL-адреса на прокручиваемый, зажимной/масштабируемый экран.

Вот мой фрагмент кода, который дает пустой белый экран. Я решил поместить его в viewDidAppear:

@property (weak, nonatomic) UIScrollView *scrollView; 
@property (weak, nonatomic) UIImageView *imageView; 

...

- (void)viewDidAppear:(BOOL)animated { 

    NSData *photoData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:urlForImage]]; 
    UIImage *photoImage = [[UIImage alloc] initWithData:photoData]; 

    self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame]; 
    [self.scrollView setContentSize:photoImage.size]; 
    [self.scrollView setMinimumZoomScale:1]; 
    [self.scrollView setMaximumZoomScale:5]; 
    [self.view addSubview:self.scrollView]; 

    self.imageView = [[UIImageView alloc] initWithImage:photoImage]; 
    [self.imageView setContentMode:UIViewContentModeScaleAspectFit]; 
    [self.imageView setFrame:self.view.frame]; 
    [self.scrollView addSubview:self.imageView]; 

} 

Я также осуществил viewForZoomingInScrollView:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return self.imageView; 
} 

Я получаю белый экран. Что мне не хватает? Заранее спасибо.

+0

Сначала убедитесь, что ничего выше (например, фотоизображения) не равно нулю. Затем я добавлю простую метку в ваш вид прокрутки и посмотрю, сможете ли вы это увидеть. –

+0

Спасибо. Я почти уверен, что фотоизображение не ноль. С точками разрыва я вижу, что переменные photoData и photoImage имеют значения. Также я NSLog URL, и он действительный в браузере. – Steven

+2

Есть ли причина, по которой вы объявили свойства слабыми, а не сильными? – jonkroll

ответ

1

Как указывает @jonkroll, проблема в том, что вы назначаете сохраненный объект слабой переменной. Это не похоже на IBOutlet, which should generally be weak. Здесь вы определенно хотите изменить его на сильный, и он должен исправить вашу проблему.

Чтобы продемонстрировать текущую проблему, если вы сразу же добавили инструкцию для операторов scrollView, вы можете быть удивлены, увидев, что это nil, потому что ARC уже выпустила ее для вас, например:

NSLog(@"scrollView = %p", scrollView); 

Сделайте их сильными, и все в порядке. Если вы замените self.scrollView и self.imageView только с помощью scrollView и imageView, вы, вероятно, увидите предупреждения компилятора.

В качестве альтернативы, если вам не нужны эти вары по другим причинам, вы также можете забыть о создании их свойств и сделать их локальными варами метода viewDidLoad (сами представления будут сохранены, когда вы добавите их в виде подзонов ... нет причин, чтобы сделать их свойствами или иварами, если вам не нужны вары по какой-то причине каким-то другим способом). Я не люблю добавлять свойства или ivars, если мне это нужно. Если они вам нужны, хорошо, они вам нужны, но если вы этого не сделаете, сделайте их локальными viewDidLoad vars.

Смежные вопросы