Mam kilka UIViews, że użytkownik powinien być w stanie przeciągnąć kroplę &. Używam UIPanGestureRecognizer do zarządzania d akcja d & (patrz kod poniżej). Akcja d działa dobrze, ale kiedy zaczynam przeciągać kolejne UIView, ten, który właśnie upuściłem, przeskakuje z powrotem do swojej pierwotnej pozycji.iOS >> Przeciągnięty widok przeskakuje z powrotem do oryginalnej pozycji >> Automatyczny układ w połączeniu z UIPanGestureRecognizer Problem
- (void)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:self.view];
switch (recognizer.state) {
case UIGestureRecognizerStateBegan:
for (UIView* checkView in dragAndDropImageViewsArray) {
if (checkView == recognizer.view) {
[checkView.superview bringSubviewToFront:checkView]; //this is done to make sure the currently dragged object is the top one
}
}
break;
case UIGestureRecognizerStateChanged:
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y);
break;
case UIGestureRecognizerStateEnded:
NSLog(@"UIGestureRecognizerStateEnded");
break;
default:
break;
}
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
}
Próbowałem kilka rzeczy, które "sloved" problem, ale spowodował inne problemy:
- Anuluj Auto-Layout: To całkowicie rozwiązuje go, ale teraz muszę zacząć obliczać i zarządzać lokalizacje obiektów i rozmiary dla różnych urządzeń i orientacji.
- Użyj layer.zPosition zamiast bringSubviewToFront: sprawia to, że obiekty pojawiają się nad innymi obiektami, jednocześnie pozornie unikając "przeskoczenia", ale nie pozwala mi zmienić hierarchii między różnymi przeciągalnymi obiektami.
Zacząłem pogłębiać moją wiedzę na temat automatycznego układu, ale staje się to bardzo skomplikowane, gdy wydaje mi się, że to, czego szukam, powinno być bardzo proste; Widziałem wiele metod, które dotyczą wykonywania "ponownego automatycznego układania", ale nie mam pojęcia, jak z nimi pracować.
Czy istnieje tutaj proste rozwiązanie? jak wywołanie metody, która przesłania ograniczenia Auto-Layout IB i przedefiniowanie ich zgodnie z nową pozycją UIView?
Każda pomoc będzie bardzo ceniona.
Dzięki James - Czy możesz bardziej szczegółowo opisać, jak używać metod removeConstraints i addConstraints? Jak przechwycić tablicę "nowych ograniczeń", gdy widok został upuszczony na nową pozycję? Jeśli jest dobry tutorial na ten temat, do którego możesz mnie skierować - naprawdę bym to docenił. –
Wypróbuj sekcję Zarządzanie ograniczeniami w dokumentacji UIView, aby dodać/usunąć. Jeśli chcesz, aby pozostało tam, gdzie wylądował, możesz spróbować ustawić górne dopełnienie i dopełnienie widoku. W przypadku ograniczeń wizualnych ustawienie widoku na 400 z góry i 200 z krawędzi wiodącej mogłoby wyglądać następująco: [Ograniczenia NSLayoutConstraintWithVisualFormat: @ "| - (= 200) - [movedViewView]": dane zerowe: widoki zerowe: @ {@ "movedView": rozpoznawanie.view}] [Ograniczenia NSLayoutConstraintWithVisualFormat: @ "V: | - (= 400) - [movedView]" opcje: zero dane: zero widoki: @ {@ "movedView": rozpoznawanie.view}] – James