UIScrollView и UIPinchGestureRecognizer - PullRequest
0 голосов
/ 14 марта 2012

У меня есть UIView, где я загружаю изображения в подпредставления с включенной прокруткой и подкачкой страниц, все работает нормально.Теперь я добавляю жест щипка для увеличения изображений, и это работает, но с некоторыми проблемами:

  1. Я, кажется, масштабирую весь скролл-просмотр, а не только изображение
  2. Я хочу ограничить масштаб до оригинального размера изображения, теперь я могу сильно уменьшить масштаб, и это делает его очень маленьким, а потом трудно уменьшить масштаб.
  3. Когда я могу увеличить, я могу 't scroll.

Вот код:

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

Я не уверен, что делать с этими проблемами.

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Решено!Использование 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];

Спасибо!

0 голосов
/ 15 марта 2012

Я делаю что-то похожее.В моем случае я отключаю zoomin в просмотре прокрутки, устанавливая 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-векторы, но принципы должны быть довольно похожи

...