5

Sto facendo ricerche sull'app "Solar" a scopo di apprendimento. Ho notato che una tessera può essere ingrandita usando un gesto di pizzicamento. Il modo in cui era lo zoom chiaramente mostrava che era stato impostato il punto di ancoraggio di uiview.come impostare il punto di ancoraggio per lo zoom con pinch (GMGridView)

si può vedere il suo video qui http://www.youtube.com/watch?v=FfgWkAuLvng

Per ottenere lo stesso, ho scaricato il codice GMGridView. Ho provato a impostare il punto di ancoraggio per ottenere lo stesso risultato dell'app Solar.

Il problema che sto affrontando è, alla prima volta che pizzico lo zoom, non riesco a farlo ingrandire al punto di ancoraggio, ma il resto delle volte. Non sono riuscito a trovare il motivo per cui non si esegue lo zoom dal punto di ancoraggio per la prima volta. Mi aiuti per favore.

Ho modificato seguendo Procedimento

- (void)pinchGestureUpdated:(UIPinchGestureRecognizer *)pinchGesture 

ho modificato lo stato del gesto riconoscitore inizio non

case UIGestureRecognizerStateBegan: 
     { 
      [self transformingGestureDidBeginWithGesture:pinchGesture]; 
      _transformingItem.contentView.layer.anchorPoint = CGPointMake(0,0.5); 
      break; 
     } 
+0

Suppongo che tu abbia una variabile di classe per la memorizzazione del punto di ancoraggio corrente. Imposta un valore iniziale per questa var?In tal caso, dove lo imposti, 'viewDidLoad' o' viewDidAppear'? –

risposta

2

Si prega di verificare il seguente codice preso da here. Per capire di più per Anchorpoint si prega this as well

CGRect oldFrame = _transformingItem.contentView.frame; 
_transformingItem.contentView.layer.anchorPoint = CGPointMake(0, 0); 
_transformingItem.contentView.frame = oldFrame; 

Spero che questo aiuti, Fatemi sapere se avete bisogno di più aiuto.

+0

Funziona bene, grazie – HarshIT

3

Ciò accade perché non appena si modifica l'Anchorpoint dello strato, sarà anche cambiamento il punto centrale della vista del livello. Diciamo che il frame della vista è 0,0,100,100 quindi per impostazione predefinita il centro della vista è a 50,50 perché il punto di ancoraggio è impostato su 0,5,0.5. Quando si modifica il punto di ancoraggio su 0,0.5, il centro della vista è ora allo 0,50 provocando il salto quando viene pescato la volta successiva. Per evitare ciò, devi aggiornare il centro della vista dopo aver cambiato il punto di ancoraggio. Ho provato all'interno del GMGridView hai descritto:

case UIGestureRecognizerStateBegan: 
    { 
     [self transformingGestureDidBeginWithGesture:pinchGesture]; 

     _transformingItem.contentView.layer.anchorPoint = CGPointMake(0,0.5); 

     CGPoint orgCenter = _transformingItem.contentView.center; 
     orgCenter.x -= _transformingItem.contentView.frame.size.width/2.f; 

     [_transformingItem.contentView setCenter:orgCenter]; 
    } 
    break; 

Spero che questo risponde alla tua domanda.

0

Non sono sicuro se ci sono dei gremlin nel codice senza vederne di più ma ci sono due buoni precedenti Q & Per quanto riguarda questo problema.

Il first Q&A si occupa semplicemente di impostare un punto di ancoraggio. Ho provato da solo e funziona bene.

Il second Q&A entra in maggiori dettagli sui punti di ancoraggio e sulla loro relazione con il modo in cui la vista si trova di conseguenza. Gli esempi qui riguardano anche l'impostazione dei punti di ancoraggio.

C'è anche un progetto di esempio che utilizza i punti di ancoraggio su Github here.

Ti suggerisco di dare un'occhiata ai due Q & Come, il progetto di progetto di esempio e confrontarli tutti con il tuo codice. Forse qualcosa salterà fuori da te che sta causando il tuo problema.