2011-03-08 3 views
0

私は漫画のためのipadアプリで働いていますが、私は動作するように私のスクロールビューを得ることができません。 +漫画のためのUIScrollビュー

  • ピンチズーム
  • 回転
  • ダブルタップをし、漫画

Here's私は35 http://vimeo.com/16073699(第二手に入れたいものの例による移動:私はそれを行う必要があります - )

今私はピンチズームがありますが、私は回転と中心の画像をスクロールビューを得ることができます。

Here's私のコントローラコード:私はインターフェイスビルダーで

#define ZOOM_VIEW_TAG 100 
#define ZOOM_STEP 2 
#define PAGE_TIME 10 

- (void)viewDidLoad{ 
    [super loadView]; 

    self.myImage.image = [UIImage imageNamed:@"Tira01.jpg"]; 

    [self.myImage setTag:ZOOM_VIEW_TAG]; 

    UISwipeGestureRecognizer *recognizer; 


    recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(Tap)]; 
    [(UITapGestureRecognizer *)recognizer setNumberOfTouchesRequired:1]; 
    [(UITapGestureRecognizer *)drecognizer setNumberOfTapsRequired:1]; 
    [[self myImage] addGestureRecognizer:recognizer]; 
    [recognizer release]; 

    self.drecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)]; 
    [(UITapGestureRecognizer *)drecognizer setNumberOfTouchesRequired:1]; 
    [(UITapGestureRecognizer *)drecognizer setNumberOfTapsRequired:2]; 
    [[self myImage] addGestureRecognizer:drecognizer]; 
    [drecognizer release]; 


} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    return [myScrollView viewWithTag:ZOOM_VIEW_TAG]; 
} 

- (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer { 
    UIInterfaceOrientation currentOrientation = [[UIDevice currentDevice] orientation]; 
    if(!self.zoomed) 
    { 
     // double tap zooms in 
     float newScale = [self.myScrollView zoomScale] * ZOOM_STEP; 
     CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]]; 
     [self.myScrollView zoomToRect:zoomRect animated:YES]; 
     self.zoomed = YES; 


    } 
    else { 
     float newScale = [self.myScrollView zoomScale]/ZOOM_STEP; 
     CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]]; 
     [self.myScrollView zoomToRect:zoomRect animated:YES]; 
     self.zoomed = NO;   
    } 

} 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{ 
    return YES; 
} 


- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center { 

    CGRect zoomRect; 

    // the zoom rect is in the content view's coordinates. 
    // At a zoom scale of 1.0, it would be the size of the imageScrollView's bounds. 
    // As the zoom scale decreases, so more content is visible, the size of the rect grows. 
    zoomRect.size.height = [self.myScrollView frame].size.height/scale; 
    zoomRect.size.width = [self.myScrollView frame].size.width/scale; 

    // choose an origin so as to get the right center. 
    zoomRect.origin.x = center.x - (zoomRect.size.width/2.0); 
    zoomRect.origin.y = center.y - (zoomRect.size.height/2.0); 

    return zoomRect; 
} 

- >のUIView(ScaleToFillモード)

- > UIScrollViewの(ScaleToFillモード)

---> UIImageView(AspectFitモード)

私は何かを知っていません間違っていますが、私はそれに夢中です:(

答えて

0

コンテンツを中心としたUIScrollViewについては、私は間違っているかもしれませんが、UIScrollViewは自動的にそれをしません。

私のアプリでは、実際には、中央になるようにscrollView内のコンテンツを移動して手動で行っています。
コンテンツ(画像)フレームがスクロールビューの境界より小さい場合は、コンテンツの位置を水平方向と垂直方向に調整してください。

以下のコードは、UIScrollViewから派生したクラスです。デフォルトのUIScrollViewを使用している場合は、親UIViewでこのコードを使用できます。



- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    if (![self centersContent]) 
    { 
     return; 
    } 

    // center the image as it becomes smaller than the size of the screen  
    CGSize boundsSize = self.bounds.size; 
    CGRect frameToCenter = imageView.frame; 

    // center horizontally 
    if (frameToCenter.size.width < boundsSize.width) 
     frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width)/2; 
    else 
     frameToCenter.origin.x = 0; 

    // center vertically 
    if (frameToCenter.size.height < boundsSize.height) 
     frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height)/2; 
    else 
     frameToCenter.origin.y = 0; 

    imageView.frame = frameToCenter; 
} 

関連する問題