4

最小ズームスケールの変更に応じてUIScrollViewを正しく更新する際に問題が発生します。

scrollviewにはサブビューとしてUIImageViewがあり、UIImageViewのimageプロパティは、UIPickerViewのdidFinishPickingMediaWithInfoメソッドに応答して設定されます。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    UIImage *takenImage = [info objectForKey:UIImagePickerControllerOriginalImage];

    [self.imageView setImage:takenImage];
    [self.imageView setFrame:CGRectMake(self.imageView.frame.origin.x, self.imageView.frame.origin.y, takenImage.size.width, takenImage.size.height)];

    [self.scrollView setContentSize:CGSizeMake(takenImage.size.width, takenImage.size.height)];

    [self.scrollView setMinimumZoomScale:[self.scrollView frame].size.width / takenImage.size.width];
    [self.scrollView setMaximumZoomScale:2.0];
    [self.scrollView setZoomScale:[self.scrollView minimumZoomScale] animated:YES];

    [self dismissModalViewControllerAnimated:YES];        

}

これは、この方法を使用して画像を初めて追加するときに正しく機能します。ただし、このメソッドが再度トリガーされると(最初と同じ画像を追加する場合でも)、後続の画像はscrollViewにフルサイズで表示され、ズームアウトすることはできません。ズームインするだけです。

contentSizescrollViewの、、、およびをログzoomScaleにダンプしましたが、それらは毎回同じです。は毎回正しく計算されています。minimumZoomScalemaximumZoomScaleminimumZoomScale

minimumZoomScale明示的に設定されているという事実を無視して、scrollViewが1.0で再描画されているかのようです。私がここで見逃している明らかな何かがありますか?

4

1 に答える 1

13

問題は、現在のズームスケールが1.0以外に設定されているときに、コンテンツサイズをリセットすることであるようです(この動作がどこかに文書化されているかどうかはわかりません)。

修正は簡単です。新しいコンテンツサイズを設定する前にzoomScale、プロパティを1.0にリセットします。

// See http://stackoverflow.com/questions/10586577
// first reset before new content size
scroller.zoomScale = 1.0f;
// set new content size
scroller.contentSize = newImage.size;
// ... adjust minimum/maximum zoom scales if needed
于 2012-08-02T09:41:12.567 に答える