5

Ich forsche an der "Solar" -App für Lernzwecke. Ich habe bemerkt, dass eine Kachel mit der Pinch-Geste gezoomt werden kann. Die Art und Weise, wie es zoomte, zeigte deutlich, dass der Ankerpunkt von iView gesetzt war.So legen Sie den Ankerpunkt für den Pinch-Zoom fest (GMGridView)

Sie seine Video hier http://www.youtube.com/watch?v=FfgWkAuLvng

das gleiche zu erreichen, sehen kann ich heruntergeladen GMGridView Code. Ich habe versucht, den Ankerpunkt zu setzen, um die gleiche Ausgabe wie in der Solar App zu erhalten.

Das Problem, das ich gegenüberstelle, ist, beim ersten Mal Prise Zoom kann ich es nicht am Ankerpunkt gezoomt bekommen, aber den Rest der Zeit. Ich konnte nicht finden, warum es nicht vom Ankerpunkt zum ersten Mal zoomt. Bitte hilf mir.

I Zinszahlungstag Verfahren als

- (void)pinchGestureUpdated:(UIPinchGestureRecognizer *)pinchGesture 

ich den Zustand der Gestenerkenner beginnen modifizierte

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

Ich nehme an, Sie haben eine Klassenvariable zum Speichern des aktuellen Ankerpunkts. Legen Sie einen Anfangswert für diese Var fest?Wenn ja, wo setzen Sie es, 'viewDidLoad' oder' viewDidAppear'? –

Antwort

2

Bitte folgenden Code aus here testen. Um mehr für anchor verstehen bitte überprüfen this as well

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

hoffe, das hilft, lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen.

+0

Es funktioniert gut, danke – HarshIT

3

Dies geschieht, weil, sobald Sie den anchor der Schicht ändern, werden Sie auch ändern der Mittelpunkt der Ansicht der Ebene. Angenommen, der Rahmen der Ansicht ist 0,0,100,100, dann ist die Mitte der Ansicht standardmäßig 50,50, da der Ankerpunkt auf 0,5,0,5 festgelegt ist. Wenn Sie nun den Ankerpunkt zu 0,0.5 ändern, befindet sich das Zentrum der Ansicht jetzt bei 0,50, wodurch es springt, wenn es das nächste Mal gezeichnet wird. Um dies zu vermeiden, müssen Sie den Mittelpunkt der Ansicht aktualisieren, nachdem Sie den Ankerpunkt geändert haben. Ich habe es in der GMGridView Sie beschrieben getestet:

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; 

Ich hoffe, dass dies Ihre Frage beantwortet.

0

Nicht sicher, ob es irgendwelche Gremlins in Ihrem Code gibt, ohne mehr davon zu sehen, aber es gibt zwei gute vorherige Q & In Bezug auf dieses Problem.

Die first Q&A behandelt einfach einen Ankerpunkt setzen. Ich habe es selbst ausprobiert und es funktioniert gut.

Die second Q&A geht detaillierter auf Ankerpunkte und ihre Beziehung zu, wie die Ansicht entsprechend angeordnet ist. Die Beispiele behandeln auch das Setzen von Ankerpunkten.

Es gibt auch ein Beispielprojekt mit Ankerpunkten auf Github here.

Ich schlage vor, Sie werfen einen Blick auf die beiden Q & As, das Beispielprojekt Projekt und vergleichen Sie alle gegen Ihren Code. Vielleicht springt etwas auf dich hinaus, das dein Problem verursacht.

Verwandte Themen