La mia applicazione ha un UIScrollView con una sottoview. La sottoview è un UIView esteso che stampa a sé una pagina PDF usando i livelli nell'evento drawLayer.UIScrollView zoomToRect non esegue lo zoom su un valore specifico (creato da UITouch CGPoint)
Lo zoom utilizzando la presa integrata funziona alla grande. setZoomScale funziona anche come previsto.
Ho avuto problemi con la funzione zoomToRect. Ho trovato un esempio online che rende una variabile zoomRect di CGRect da un determinato CGPoint.
Nella funzione touchesEnded, se ci fosse un doppio tap e sono tutta la strada ingrandito, voglio per ingrandire a quella PDFUIView ho creato come se fossero pizzicando con il centro della pizzico in cui doppia sfruttato .
Quindi supporre che mi passa la variabile UITouch alla mia funzione che utilizza zoomToRect se Double Tap.
Ho iniziato con la seguente funzione che ho trovato su mele sito:
La seguente è una versione modificata per la mia UIScrollView classe estesa:
- (void)zoomToCenter:(float)scale withCenter:(CGPoint)center {
CGRect zoomRect;
zoomRect.size.height = self.frame.size.height/scale;
zoomRect.size.width = self.frame.size.width/scale;
zoomRect.origin.x = center.x - (zoomRect.size.width/2.0);
zoomRect.origin.y = center.y - (zoomRect.size.height/2.0);
//return zoomRect;
[self zoomToRect:zoomRect animated:YES];
}
Quando faccio questo, il UIScrollView sembra ingrandire usando il bordo in basso a destra dello zoomRetto sopra e non al centro.
Se faccio UIView come questo
UIView *v = [[UIView alloc] initWithFrame:zoomRect];
[v setBackgroundColor:[UIView redColor]];
[self addSubview:v];
La scatola rossa presenta con il punto di contatto morti nel centro.
Nota: lo sto scrivendo dal mio PC, ricordo di aver giocato con la parte divisa in due sul mio Mac, quindi supponiamo che questo disegni un rect con il punto di contatto al centro. Se l'UIView si è ritirato dal centro ma è stato ingrandito al punto giusto, sarebbe andato tutto bene.
Tuttavia, ciò che accade è quando la preforma zoomToRect sembra utilizzare basso a destra fuori zoomRect in alto a sinistra della ingrandita risultati.
Inoltre, ho notato che a seconda di dove clicco sul UIScrollView, àncora di differente macchie. Sembra quasi che ci sia una croce in mezzo e sta riflettendo i punti in qualche modo come se da qualche parte a sinistra del centro vi sia un riflesso negativo e ovunque nel mezzo c'è un riflesso positivo?
Questo sembra complicato, non dovrebbe solo lo zoom al rect che è stato disegnato come l'UIView è stato in grado di disegnare?
ho usato un sacco di ricerca per capire come creare un PDF in grado di scalare in alta qualità, così io parto dal presupposto che utilizzando il CALayer può essere gettando via il sistema di coordinate? Ma per UIScrollView dovrebbe trattarlo come una vista con dimensioni 768x985.
Questo è un po 'avanzato, si prega di assumere il codice per creare lo zoomRetto è tutto buono. C'è qualcosa di più profondo con il CALayer nella UIView che si trova in UIScrollView ....
ritardo commento, ma non ho potuto resistere; se funziona, è pura fortuna. Moltiplicare le coordinate di un centro non ha alcun significato. Se è necessario eseguire una traduzione su un centro, si aggiunge invece un valore. Ma molto probabilmente, il centro non è corretto perché è stato calcolato dal riferimento del sistema di coordinate sbagliato (ad esempio dalla vista errata) – jyavenard