0

ダブルタップでズームインしUIImageViewています。UIScrollViewInterface Builder でセットアップすると正常に動作します。ここで見られる魔法は、contentSizeズームインscrollView/ズームアウトするにつれて自然に増加/減少することです。contentSizeinをチェックしますがviewDidLoad、ゼロではありません。

scrollViewIB からandを削除して同じことを試み、imageViewプログラムで作成しました。imageViewとを追加した後、tapGestureRecognizerここでズームに失敗しました。理由を調べてみると、contentSizeどこもゼロのまま。

それらを IB/xib に追加すると、contentSize. 私はどこにも設定していません。必要な場所で自動的にcontentSize調整されます。しかし、scrollViewプログラムで作成すると複製されません。

どうすればそれを機能させることができますか? あなたの提案を歓迎します。

参照用の私のコードは次のとおりです。

IB で作成された ScrollView

- (void)viewDidLoad {
    [super viewDidLoad];

    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    [doubleTap setNumberOfTapsRequired:2];
    [imageView addGestureRecognizer:doubleTap];
    imageScrollView.minimumZoomScale=1.01;
    imageScrollView.maximumZoomScale=5;
    imageScrollView.zoomScale=1.01;
    NSLog(@"height = %f width = %f", imageScrollView.contentSize.height, imageScrollView.contentSize.width);
}

NSLogは言う

height = 449.479767 width = 320.000000

プログラムで作成された ScrollView

- (void)viewDidLoad {
    [super viewDidLoad];

    imageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    [doubleTap setNumberOfTapsRequired:2];
    [imageView addGestureRecognizer:doubleTap];
    imageScrollView.minimumZoomScale=1.01;
    imageScrollView.maximumZoomScale=5;
    imageScrollView.zoomScale=1.01;

    [self.view addSubview:imageScrollView];
    [self.imageScrollView addSubview:imageView];
    NSLog(@"height = %f width = %f", imageScrollView.contentSize.height, imageScrollView.contentSize.width);
}

NSLogは言う

height = 0.000000 width = 0.000000
4

3 に答える 3

1

これらのプロパティ

self.minimumZoomScale=1.01;
self.maximumZoomScale=5;
self.zoomScale=1.01;

scrollView のプロパティである必要があります。

imageScrollView.minimumZoomScale=1.01;
imageScrollView.maximumZoomScale=5;
imageScrollView.zoomScale=1.01;

次に、さらに contentSize プロパティを設定する必要があります (IB を使用する場合は、xib ファイルから読み込まれるため、設定する必要はありません)。

imageScrollView.contentSize = CGSizeMake(width,height);

適切な値を使用します。

さらに、デリゲートを設定する必要があります。

imageScrollView.delegate = self;

そして、ズームするサブビューを示す少なくとも 1 つのデリゲート メソッド:

 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
   return scrollView.subviews[0];
}

(実際には、サブビューにタグを設定するか、プロパティに割り当てて参照を取得することをお勧めします。スクロールビューには組み込みのサブビューもあります)

于 2013-07-25T07:51:17.803 に答える
0

xib で自動レイアウトが有効になっていますか? その場合、IB は画像ビューとスクロール ビューの間に制約を設定しており、実行時に自動レイアウトは制約を使用してスクロール ビューのコンテンツ サイズを設定します。コードでビューを作成する場合、十分な制約を追加しておらず、コンテンツ サイズを直接設定していないため、コンテンツ サイズはゼロのままです。

詳細については、 Tech note TN2154を参照してください。

于 2013-07-25T08:07:17.677 に答える
0

コーディングを使用したスクロールビュー内の画像のズームについて、@Pheel から同様の回答が得られます。

回答のリンクは以下のとおりです。

IOS: スクロールビューにイメージビューを追加してズームする

于 2013-07-26T07:33:26.020 に答える