2011-01-28 18 views
1

をズームすると、プログラムUIScrollViewのの固定が、私は、プログラムの方法をズームしてUIScrollViewのを作成するために管理してきましたが、私は一種のスタック私はズームで抱えている問題を解決する方法だ:境界とそう

  1. ピンチジェスチャーを行う場所で拡大/縮小が発生しないポイントをズームインまたはズームアウトすると、コーナーで発生します。

  2. ズームインまたはズームアウトすると、境界の外側に余分なスペースが残ってしまい、イメージの幅の半分を超えてイメージをスクロールできなくなります。

これ以外は、100%の動作に近づいています。私はachorpointsで遊んでみましたが、スクロールビューとイメージビューがこれに応答しないように見えます。ここで

は、コード・リストで重要なものである:

UIScrollView *mapScrollView; 

UIImageView *mapImageView; 

CGFloat lastScale = 0; 

NSMutableArray *map_List; 


- (id)initWithFrame:(CGRect)frame { 

    self = [super initWithFrame:frame]; 
    if (self) { 

    mainMenuAppDelegate *del = (mainMenuAppDelegate *)[[UIApplication sharedApplication] delegate]; 

    map_List = [[NSMutableArray alloc] init]; 
    [map_List addObject:@"Pacific_Map_8bit.png"]; 
    [map_List addObject:@"Atlantic_Map_8bit.png"]; 


    CGRect mapScrollViewFrame = CGRectMake(0, 0, 1024, 768); 

    mapScrollView = [[UIScrollView alloc] initWithFrame:mapScrollViewFrame]; 

    mapScrollView.contentSize = CGSizeMake(2437, 1536); 


    UIImage *mapImage = [UIImage imageNamed:[map_List objectAtIndex:mapNum]]; 

    mapImageView = [[UIImageView alloc] initWithImage: mapImage]; 

    mapScrollView.bounces = NO; 

    [mapImage release]; 

    [mapScrollView addSubview:mapImageView]; 
    [self addSubview:mapScrollView]; 

    mapImageView.userInteractionEnabled = YES; 


    UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)]; 
    [mapImageView addGestureRecognizer:pinchRecognizer]; 

    [pinchRecognizer release]; 
    } 
    return self; 

} 
// the scale method thats triggered to zoom when pinching 
-(void)scale:(id)sender { 

if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) { 

    lastScale = 1.0; 
    return; 
} 

CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]); 

NSLog(@"map scale %f", scale); 

CGFloat mapWidth = mapImageView.frame.size.width; 
CGFloat mapHeight = mapImageView.frame.size.height; 
NSLog(@"map width %f", mapWidth); 

if(scale>=1 & mapWidth<=4000 || scale<1 & mapWidth>=1234){ 

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

    lastScale = [(UIPinchGestureRecognizer*)sender scale]; 

} 

mapScrollView.contentSize = CGSizeMake(mapWidth, mapHeight); 

} 

ありがとう!

答えて

2

UIScrollViewには、ズームが組み込まれています。あなたがする必要があるのは、minimumZoomScalemaximumZoomScaleのプロパティを設定し、ズームに使用するビューをviewForZoomingInScrollViewで返します。

+0

インタフェースビルダーを使用していない場合でも、 – VagueExplanation

+0

@ user586006確かに。 – pt2ph8

+0

さて、私はそれを試してみましょうと私はあなたに、おかげで戻ってきます。 – VagueExplanation