2012-03-14 70 views
0

我有一个UIView与我在哪里加载图像到子视图滚动和分页启用,它工作正常。现在我加入捏合手势来放大的图像,它的工作,但有一些问题:UIScrollView和UIPinchGestureRecognizer

  1. 我似乎被放大了整个滚动视图,不仅图像
  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),然后你会得到所有的捏和缩放和滚动功能,内置的。:) – 2012-03-14 15:37:30

+0

好吧,我用滚动视图因为我希望启用分页功能,并认为这是要走的路。但也许我应该考虑使用webview来代替。现在,我将来自plist的X张图像加载到分页的子视图中。但我可以在webview中将它们加载到eachother的顶部,并向下滚动而不是分页。我会看看它是怎么回事,thanx :-) – KeLLoGsX 2012-03-16 07:06:49

回答

0

我做了类似的事情。在我的情况下,我通过设置最小和最大缩放比例来禁用缩放比例。

我的捏管理器然后只是从手势参数中计算缩放因子,并告诉包含在滚动视图中的视图重新绘制。这将会处理缩放本身。捏手柄应该限制缩放系数。请记住,从手势识别器传入的比例因子不是绝对比例,而是来自上一个事件的差值。

你需要做这样的事情:

... 

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

解决!使用UIWebview加载pdf。在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!