5

Robię badania w aplikacji "Solar" do celów edukacyjnych. Zauważyłem, że kafelek można powiększać za pomocą gestu szczypania. Sposób, w jaki zoom był wyraźnie pokazywany, wskazywał, że ustawił punkt zakotwiczenia uiview.sposób ustawiania punktu kontrolnego widoku przybliżenia (GMGridView)

można zobaczyć jego film tutaj http://www.youtube.com/watch?v=FfgWkAuLvng

Aby osiągnąć takie same, Pobrałem kod GMGridView. Próbowałem ustawić punkt kontrolny, aby uzyskać takie same wyniki, jak w aplikacji Solar.

Problem, przed którym stoję, to: Przy pierwszym przybliżeniu nie można uzyskać powiększenia punktu zaczepienia, ale pozostałą część czasu. Nie mogłem znaleźć przyczyny, dla której nie jest ona powiększana od punktu zakotwiczenia po raz pierwszy. Proszę pomóż mi.

I zmodyfikowane po Sposób

- (void)pinchGestureUpdated:(UIPinchGestureRecognizer *)pinchGesture 

zmodyfikowałem rozpocząć stan gest rozpoznawania jako

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

Zakładam, że masz zmienną klasy do przechowywania bieżącego punktu kontrolnego. Czy ustawiasz wartość początkową dla tego var?Jeśli tak, gdzie go ustawić, 'viewDidLoad' lub' viewDidAppear'? –

Odpowiedz

2

Proszę sprawdzić poniższy kod zaczerpnięty z here. Aby zrozumieć więcej na Anchorpoint sprawdź this as well

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

Hope this helps, Daj mi znać, jeśli potrzebujesz więcej pomocy.

+0

Działa dobrze, dzięki – HarshIT

3

Dzieje się tak dlatego, że jak najszybciej zmienić Anchorpoint warstwy, będzie również zmiana centralny punkt widoku warstwy. Załóżmy, że ramka widoku to 0,0,100,100 wtedy domyślnie centrum widoku ma wartość 50,50, ponieważ punkt zakotwiczenia jest ustawiony na 0.5,0.5. Kiedy zmienisz punkt kontrolny na 0,0,5, środek widoku jest teraz na 0,50 powodując jego przeskok, gdy zostanie narysowany następnym razem. Aby tego uniknąć, musisz zaktualizować centrum widoku po zmianie punktu kontrolnego. Przetestowałem go w GMGridView opisałeś:

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; 

Mam nadzieję, że odpowiedzi na swoje pytanie.

0

Nie jestem pewien, czy w twoim kodzie są jakieś gremliny, ale nie widzę ich więcej, ale są dwa dobre poprzednie Q & Co do tego problemu.

The first Q&A zajmuje się po prostu ustawianiem punktu kontrolnego. Próbowałem tego sam i działa dobrze.

Szczegółowe informacje na temat punktów kontrolnych i ich związku z widokiem znajdują się pod numerem second Q&A. Przykłady tutaj dotyczą również ustawiania punktów kontrolnych.

Istnieje również przykładowy projekt wykorzystujący punkty kontrolne na Github here.

Proponuję przyjrzeć się dwóm przykładowym projektom Q & i porównać je wszystkie ze swoim kodem. Być może coś wyskoczy na ciebie, co jest przyczyną problemu.

Powiązane problemy