2012-03-14 19 views
0

私はスクロールとページングを有効にしてサブビューに画像を読み込むUIViewを持っています。今、私は、画像にズームするピンチジェスチャーを追加することだし、それは働いていますが、いくつかの問題に:UIScrollViewとUIPinchGestureRecognizer

  1. 私は、全体のscrollview、私はズームを制限したい画像
  2. ないだけをズームしているように見えます画像の輪郭サイズに合わせることで、今度はズームアウトしてズームすることができ、ズームインするのが難しくなります。
  3. ズームインするとスクロールできません。

ここでは、コードです:

NSDictionary *dictionary = [tmpAppDelegate.data objectForKey:selectedTitle]; 
NSArray *MenuImageArr = [[NSArray alloc] init]; 
MenuImageArr = [dictionary objectForKey:@"MenuArr"]; 

NSMutableArray *menuImages = [[NSMutableArray alloc] init]; 
scrollView.delegate = self; 
// loop through all names from the plist and add image to the array 
for (NSInteger i = 0; i < [MenuImageArr count]; i++) { 
    NSString *name = [MenuImageArr objectAtIndex:i]; 
    [menuImages addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%@_%@", selectedTitle, name]]]; 
} 
for (int i = 0; i < menuImages.count; i++) { 
    CGRect frame; 
    frame.origin.x = self.scrollView.frame.size.width * i; 
    frame.origin.y = 0; 
    frame.size = self.scrollView.frame.size; 
    subview = [[UIImageView alloc] initWithFrame:frame]; 
    subview.image = [menuImages objectAtIndex:i]; 
    [self.scrollView addSubview:subview]; 
    } 
self.pageControl.numberOfPages = menuImages.count; 
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * menuImages.count, self.scrollView.frame.size.height); 
} 

- (void)scrollViewDidScroll:(UIScrollView *)sender { 
// Update the page when more than 50% of the previous/next page is visible 
CGFloat pageWidth = self.scrollView.frame.size.width; 
int page = floor((self.scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
self.pageControl.currentPage = page; 
} 
- (IBAction)changePage { 
// update the scroll view to the appropriate page 
CGRect frame; 
frame.origin.x = self.scrollView.frame.size.width * self.pageControl.currentPage; 
frame.origin.y = 0; 
frame.size = self.scrollView.frame.size; 
[self.scrollView scrollRectToVisible:frame animated:YES]; 
pageControlBeingUsed = YES; 
} 

- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer { 
recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale); 
recognizer.scale = 1; 
} 

私は、これらの問題を続行するかどうかはわかりません。

+0

UIWebView(スクロールビューではなく)を使用してイメージをそこに置く(HTMLとして)と、ピンチとズームとスクロールのすべての機能が組み込まれているのはなぜですか? –

+0

スクロールビュー私はページングを有効にして、それが行く方法だと思っていたからです。しかし、おそらく私は代わりにwebviewを使用する必要があります。今度は、plistからX個のイメージをページビュー用のサブビューにロードします。しかし、私はwebviewでお互いの上にそれらを読み込んで、ページングの代わりにスクロールすることができます。それがどうやって行くのか見てみよう。 – KeLLoGsX

答えて

0

私は何か類似しています。私の場合は、minとmaxzoomscaleを1に設定することで、スクロールビューのズームインを無効にします。

私のピンチハンドラは、これにより、ズーム自体が処理されます。ピンチハンドルはズーム係数を制限する必要があります。ジェスチャ認識器から渡されたスケールファクタは絶対スケールではなく、最後のイベントのデルタであることに注意してください。

あなたはこのような何かをする必要があります:私の頭の上から

... 

float lastScale = 1; 

... 

- (void) pinchGestureRecognizer:(UIPinchGestureRecognizer*) recognizer 
{ 
    float newScale = self.myScale + (recognizer.scale - lastScale) 
    self.myDrawing.scale = newScale; 

    if (recognizer.state === UIGestureRecognizerStateEnded) 
    { 
     lastScale = 1; 
     return; 
    } 

    lastScale = recognizer.scale; 

    [self.myDrawing setNeedsDisplay]; 
} 

厥ので、うまくいけば、私は手動でいくつかのSVGベクトルを描いてるよう

私の正確な状況はわずかに異なっているのに役立ちますが、原則はかなり似ているはずです

0

解決済み! PDFをロードするUIWebviewを使用します。 pathForResourceのメインバンドルで正しいパスを取得するときに問題が発生しました。

NSString *path = [[NSBundle mainBundle] pathForResource:@"Millennium_meny" ofType:@"pdf"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:request]; 
[webView setScalesPageToFit:YES]; 

Thanx!