2011-03-08 90 views
0

我正在为漫画制作ipad应用程序,但我无法让我的滚动视图正常工作。我需要做的:漫画应用程序的UIScroll视图

  • 双指缩放
  • 旋转
  • 双击和连环画

Here's什么,我想http://vimeo.com/16073699(二35为例移动+ - )

现在我有捏缩放,但我可以得到滚动视图旋转和居中图像。

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; 
}