9

のズームを正常に実装しましたがUIImageView、私UIScrollViewを苛立たせる奇妙な問題に直面しました。

基本的に、画像を拡大すると

ここに画像の説明を入力

ビューをパンして、実際に画像の境界線からスクロールアウトすると、次のような黒い領域が残ります。 ここに画像の説明を入力

さらにズームインすると、黒い枠線が画面全体に表示されます。一方、iPhone の写真アプリでは、実際の画像をズームアウトすることはできません。私の実装で何が問題になっていますか?

次のようになります。

UIImage *imageToDisplay = [UIImage imageWithData:tmpImageData];
imageViewMain.image = imageToDisplay;
imageViewMain.frame = CGRectMake(0, 0, scrollViewMain.frame.size.width, scrollViewMain.frame.size.height);
imageViewMain.contentMode = UIViewContentModeScaleAspectFit;

scrollViewMain.delegate = self;
scrollViewMain.minimumZoomScale = 1.0;
scrollViewMain.maximumZoomScale = 9.0;
scrollViewMain.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
scrollViewMain.contentSize = imageViewMain.frame.size;

[self.view addSubview:scrollViewMain];
[scrollViewMain addSubview:imageViewMain];

そして、私はこのメソッドも実装しています:

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return imageViewMain;
}

前もって感謝します!

編集:最初にビューをロードするとき、スクロール ビューに合わせて UIImageView を縮小すると、画像は次のようになります。

ここに画像の説明を入力

4

2 に答える 2

2

このコードを試してみてください...必要な場所でコードを変更UIPinchGestureRecognizerしてください...使用してUIImageViewから、この画像を以下のように追加してくださいUIScrollView..

UIImageView *img = [[UIImageView alloc]init];
img.image = [UIImage imageWithData:tmpImageData];
img.userInteractionEnabled = YES;
img.frame = CGRectMake(210,100, 200, 200);/// define frame which you want...
[img sizeToFit];

UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
[pinchRecognizer setDelegate:self];
[img addGestureRecognizer:pinchRecognizer];
[pinchRecognizer release];
[scrollViewMain addSubview:img];
[scrollViewMain bringSubviewToFront:img];
[img release]; 

この次のコードを .m ファイルに貼り付けるだけです...

#pragma mark GestureRecognizer Methods
-(void)scale:(id)sender 
{
    UIView *imgTempGest = [sender view];
    if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) 
    {
        lastScale = 1.0;
        return;
    }
    CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]);

    CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);

    [[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform];

    [imgTempGest setTransform:newTransform];

    lastScale = [(UIPinchGestureRecognizer*)sender scale];
}

ここで LastScale の場合、次の.hように変数をファイルに定義するだけです...

CGFloat lastScale;

これがお役に立てば幸いです...

于 2013-03-22T12:32:15.517 に答える
1

元の画像の上下にその境界線が含まれていますか?実際の画像にその黒い上部と下部の黒い領域が含まれている場合、出力は間違っていません。同じコードを使用できます。そして、このコードも追加します。

scrollView.scrollEnabled = YES

また、変化します、

scrollView.contentSize = imageView.bounds.size;

また、9のズームスケールを提供しています。それだけが必要ですか。3または4に変更して試してください。あなたの問題は修正されます

于 2013-03-22T13:32:54.573 に答える