0

あきらめる。この非常に基本的なことを機能させることができないようです。助けてください...

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;
}

白い画面が表示されます。私は何が欠けていますか?前もって感謝します。

4

1 に答える 1

1

@jonkroll が示唆するように、問題は、保持されたオブジェクトを弱い変数に割り当てていることです。これは、通常はweak である IBOutlet とは異なります。ここでは、間違いなくそれを強力に変更したいと考えており、問題を解決する必要があります.

現在の問題を示すために、たとえば、scrollView の alloc/init ステートメントの直後に次のステートメントを配置すると、ARC が既にそれをリリースしているため、それが nil であることに驚くかもしれません。

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

それらを強くしてください、そしてあなたは大丈夫です。self.scrollView と self.imageView を scrollView と imageView だけに置き換えると、おそらくコンパイラの警告が表示されます。

または、他の理由でこれらの変数が必要ない場合は、それらをプロパティにすることをまったく忘れて、viewDidLoad メソッドのローカル変数にすることもできます (サブビューとして追加すると、ビュー自体は保持されます...いいえ他の方法でなんらかの理由で vars が必要でない限り、それらをプロパティまたは ivar にする理由)。必要でない限り、プロパティや ivar を追加するのは好きではありません。必要な場合は必要ですが、そうでない場合はローカルの viewDidLoad 変数にします。

于 2012-04-18T02:41:31.477 に答える