UIScrollView без подкачки страниц, но с прикосновением - PullRequest
0 голосов
/ 25 мая 2010

У меня есть UIScrollView, который я использую для отображения страниц PDF. Я не хочу использовать пейджинг (пока). Я хочу отображать контент, основанный на событии касания (так после горизонтального пролистывания).

Это работает (вроде), но вместо того, чтобы поймать один лист и показывать 1 страницу, кажется, что он разбивается на 100 частей, а 1 - как будто вы двигаете слайдер!

Понятия не имею, что я делаю не так.

Вот экспериментальный код «Показать следующую страницу», который работает на одном касании:

- (void)nacrtajNovuStranicu:(CGContextRef)myContext
{  
 CGContextTranslateCTM(myContext, 0.0, self.bounds.size.height);
 CGContextScaleCTM(myContext, 1.0, -1.0); 
 CGContextSetRGBFillColor(myContext, 255, 255, 255, 1);
 CGContextFillRect(myContext, CGRectMake(0, 0, 320, 412)); 

 size_t brojStranica = CGPDFDocumentGetNumberOfPages(pdfFajl);

 if(pageNumber < brojStranica){
  pageNumber ++;
 }
 else{
  // kraj PDF fajla, ne listaj dalje.
 } 

 CGPDFPageRef page = CGPDFDocumentGetPage(pdfFajl, pageNumber); 
 CGContextSaveGState(myContext);
 CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, self.bounds, 0, true);
 CGContextConcatCTM(myContext, pdfTransform);

 CGContextDrawPDFPage(myContext, page);
 CGContextRestoreGState(myContext);
 //osvjezi displej
 [self setNeedsDisplay];
}

Вот код смахивания:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
 [super touchesBegan:touches withEvent:event];
    UITouch *touch = [touches anyObject];
    gestureStartPoint = [touch locationInView:self];    
}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {    
    UITouch *touch = [touches anyObject];
    CGPoint currentPosition = [touch locationInView:self];

    CGFloat deltaX = fabsf(gestureStartPoint.x - currentPosition.x);
    CGFloat deltaY = fabsf(gestureStartPoint.y - currentPosition.y);

    if (deltaX >= kMinimumGestureLength && deltaY <= kMaximumVariance) {  
  [self nacrtajNovuStranicu:(CGContextRef)UIGraphicsGetCurrentContext()]; 
    }
}

Код находится в UIView, который отображает содержимое PDF, возможно, мне следует поместить его в UIScrollView, или код «отображать следующую страницу» неправильный?

1 Ответ

1 голос
/ 25 мая 2010

Кажется, я понял это.

Я добавил:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self nacrtajNovuStranicu:(CGContextRef)UIGraphicsGetCurrentContext()]; 
[self setNeedsDisplay];
}

и удалено [self nacrtajNovuStranicu: (CGContextRef) UIGraphicsGetCurrentContext ()]; от метода касания.

...