2011-10-26 1 views
5

Sto scrivendo un lettore PDF usando la libreria vfr-reader. Per visualizzare due pagine in orizzontale, sto rendendo ogni pagina una sua vista, quindi aggiungi queste due viste a una vista contenitore, quindi aggiungi la vista Contenitore a una vista di scorrimento. La maschera autoresizing di ogni vista è impostata su UIViewAutoresizingNone, contentMode è UIViewContentModeRedraw, autoresizingSubviews è impostato su "NO" per tutte le viste.Come impedire che UIView venga ridimensionato per adattarsi all'altezza ScrollView (autoresizing disabilitato)?

Ma ancora in qualche modo la vista del contenitore è autorizzata per adattarsi all'altezza della vista di scorrimento e non so dove stia succedendo. Mi interessa perché, quando si autorizza la visualizzazione del contenitore, la larghezza diventa maggiore della larghezza dello schermo e non riesco a scorrere le due pagine successive con un solo tocco (sono necessari due passaggi), il che fa schifo. Cosa mi manca?

MODIFICA aggiungendo un po 'venire se aiuta. Nel ViewController creo uno Scroll View con seguenti opzioni:

theScrollView = [[ReaderScrollView alloc] initWithFrame:viewRect]; 
theScrollView.scrollsToTop = NO; 
theScrollView.pagingEnabled = YES; 
theScrollView.delaysContentTouches = NO; 
theScrollView.showsVerticalScrollIndicator = NO; 
theScrollView.showsHorizontalScrollIndicator = NO; 
theScrollView.contentMode = UIViewContentModeRedraw; 
theScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
theScrollView.backgroundColor = [UIColor clearColor]; 
theScrollView.userInteractionEnabled = YES; 
theScrollView.autoresizesSubviews = NO; 
theScrollView.delegate = self; 
[self.view addSubview:theScrollView]; 

Quando sto disegnando pagine che sto aggiungendo un UIView al Scroll View, che viene avviata in questo modo:

if ((self = [super initWithFrame:frame])) 
{ 
    self.autoresizesSubviews = YES; 
    self.userInteractionEnabled = YES; 
    self.contentMode = UIViewContentModeRedraw; 
    self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;  
    self.backgroundColor = [UIColor clearColor]; 

    theScrollView = [[ReaderScrollView alloc] initWithFrame:self.bounds]; // Not sure about this part - why is the 2nd scroll view added? 
// this is the way its done in vfr reader 

    theScrollView.scrollsToTop = NO; 
    theScrollView.delaysContentTouches = NO; 
    theScrollView.showsVerticalScrollIndicator = NO; 
    theScrollView.showsHorizontalScrollIndicator = NO; 
    theScrollView.contentMode = UIViewContentModeRedraw; 
    theScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    theScrollView.backgroundColor = [UIColor clearColor]; 
    theScrollView.userInteractionEnabled = YES; 
    theScrollView.autoresizesSubviews = NO; 
    theScrollView.bouncesZoom = YES; 
    theScrollView.delegate = self; 

    theContentView = [[ReaderContentPage alloc] initWithURL:fileURL page:page password:phrase landscape:(BOOL)isLandscape position:FALSE]; 
    CGRect viewRect = CGRectZero; 
    viewRect.size.width = theContentView.bounds.size.width; 
    viewRect.size.height = theContentView.bounds.size.height;  


    if(isLandscape){ 
     NSLog(@"Landscape detected in content view"); 
     if (theContentView == NULL) 
     { 
      theContentView = [[ReaderContentPage alloc] initWithURL:fileURL page:(page+1) password:phrase landscape:(BOOL)isLandscape position:FALSE]; 
      theContentView2 = NULL; 
      viewRect.size.width = theContentView.bounds.size.width; 
      viewRect.size.height = theContentView.bounds.size.height;  
     } else { 
      if (page == 1) 
       theContentView2 = NULL; 
      else 
       theContentView2 = [[ReaderContentPage alloc] initWithURL:fileURL page:(page+1) password:phrase landscape:(BOOL)isLandscape position:TRUE]; 
      if (theContentView2 != NULL) 
       viewRect.size.width = theContentView.bounds.size.width*2; 
     }    

    }  
    if (theContentView != nil) // Must have a valid and initialized content view 
    { 

     theContainerView = [[UIView alloc] initWithFrame:viewRect]; 


     theContainerView.autoresizesSubviews = NO; 
     theContainerView.userInteractionEnabled = NO; 
     theContainerView.contentMode = UIViewContentModeRedraw;    
     theContainerView.autoresizingMask = UIViewAutoresizingNone; 
     theContainerView.backgroundColor = [UIColor whiteColor]; 


     theScrollView.contentSize = theContentView.bounds.size; // Content size same as view size 


     theScrollView.contentOffset = CGPointMake((0.0f - CONTENT_INSET), (0.0f - CONTENT_INSET)); 
     theScrollView.contentInset = UIEdgeInsetsMake(CONTENT_INSET, CONTENT_INSET, CONTENT_INSET, CONTENT_INSET); 

     theThumbView = [[ReaderContentThumb alloc] initWithFrame:theContentView.bounds]; // Page thumb view   

     [theContainerView addSubview:theThumbView]; // Add the thumb view to the container view 

     [theContainerView addSubview:theContentView]; // Add the content view to the container view 

     if((isLandscape) && (theContentView2 != NULL)){    
      [theContainerView addSubview:theContentView2]; // Add the content view to the container view 

     }   



     [theScrollView addSubview:theContainerView]; // Add the container view to the scroll view 

     [self updateMinimumMaximumZoom]; // Update the minimum and maximum zoom scales 

     theScrollView.zoomScale = theScrollView.minimumZoomScale; // Zoom to fit 
    } 

    [self addSubview:theScrollView]; // Add the scroll view to the parent container view 

    [theScrollView addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:NULL]; 

    self.tag = page; // Tag the view with the page number 
} 

return self; 

e ReaderContentPage si crea in questo modo:

if ((self = [super initWithFrame:frame])) 
    { 
     self.autoresizesSubviews = NO; 

     self.userInteractionEnabled = NO; 
     self.clearsContextBeforeDrawing = NO; 
     self.contentMode = UIViewContentModeRedraw;  
     self.autoresizingMask = UIViewAutoresizingNone; 
     self.backgroundColor = [UIColor clearColor]; 

     view = self; // Return self 
    } 
+0

Avete fatto con successo il pdf 2Page sul paesaggio qui @Spail? – jovhenni19

+0

Sì, ma in un modo un po 'ritardato. Spero di tornare presto a questa app e di farlo correttamente. – Spail

risposta

1

C'è una proprietà contentMode in UIScrollView, modificarlo a UIViewContentModeCenter o qualcosa d'altro per evitare il ridimensionamento.

+0

che non aiuta – Spail

+0

Posso vedere qualche codice? –

+0

Non sono sicuro di quale codice sia necessario, ma ho aggiunto molto al mio post iniziale – Spail

2

Nella funzione updateMinimumMaximumZoom nella classe ReaderContentView:

Il calcolo del zoomscale per adattarsi allo schermo è fatto con unico punto di vista, ma nel paesaggio va calcolato modulo theContainerView.

provare a sostituire questo codice

CGFloat zoomScale = ZoomScaleThatFits(targetRect.size, theContentView.bounds.size);

con

CGFloat zoomScale = ZoomScaleThatFits(targetRect.size, theContainerView.bounds.size);

+0

in modalità doppia pagina per orizzontale, per lo stesso progetto (pdf vfr/reader), come riescono a passare alla pagina successiva quando si esegue uno scorrimento. Ad esempio, a pagina 1, e ho 2 pagine che mostrano in theContainerView, quando faccio uno swipe voglio caricare le pagine 3 e 4. Attualmente quando faccio lo swipe mi mostra le pagine 2 e 3. Come ottenere vero? –