0

UIPinchGestureRecognizera を使用して a のサイズを変更しようとしていますUIImageView。シンプルな作品を適用すると、CGAffineTransform左上隅に基づいてサイズが変更されますが、画像の中心に基づいてサイズを変更したいです。次のコードで目的の結果を得ることができます

-(IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer
{
UIImageView *view = [recognizer view];
float scale = recognizer.scale;
view.bounds = CGRectMake(0,  0, view.bounds.size.height*scale, view.bounds.size.width*scale);
recognizer.scale = 1;
}

問題は、このコードを使用すると、画像のサイズが変更されると、画像がすべてグリッチと途切れ途切れになることです。なぜこれが起こっているのでしょうか?

4

1 に答える 1

0

あなたはこれを難しい方法でやっているかもしれません。あなたをUIImageViewに追加することを検討することを提案UIScrollViewし、スクロール ビューに任せてください。例えば:

のヘッダーUIScrollViewDelegate:

#import <UIKit/UIKit.h>

@interface MyScrollViewController : UIViewController <UIScrollViewDelegate>

@end

ズームを可能にするスクロール ビューのセットアップを示す実装:

#import "MyScrollViewController.h"

#define MIN_ZOOM_FACTOR 1
#define MAX_ZOOM_FACTOR 5

@interface MyScrollViewController () {
    UIScrollView *scrollView;
    UIImageView *imageView;
}

@end

@implementation MyScrollViewController

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

    scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
    scrollView.backgroundColor = [UIColor clearColor];
    scrollView.delegate = self;
    scrollView.contentSize = CGSizeMake(self.view.bounds.size.width * MAX_ZOOM_FACTOR,
                                    self.view.bounds.size.height * MAX_ZOOM_FACTOR);
    scrollView.minimumZoomScale = MIN_ZOOM_FACTOR;
    scrollView.maximumZoomScale = MAX_ZOOM_FACTOR;

    imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"your_image_name.png"]];
    imageView.frame = scrollView.frame;
    imageView.contentMode = UIViewContentModeScaleAspectFit;

    [scrollView addSubview:imageView];
}

#pragma mark - Scroll view delegate methods

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

@end

パンとズームがいつ発生しているか、ズーム スケールが何であるかなどを知りたい場合は、追加のUIScrollViewDelegateメソッドを実装します。例えば:

-(void)scrollViewDidZoom:(UIScrollView *)zoomedScrollingView{
    float zoomScale = scrollView.zoomScale;
    // Do something with zoomScale...
}
于 2012-11-08T00:27:16.630 に答える