У меня есть несколько UIView, которые пользователь должен уметь перетаскивать. Я использую UIPanGestureRecognizer для управления действиями d & d (см. Код ниже). Действие d & d работает нормально, но когда я начинаю перетаскивать другой UIView, тот, который я только что сбросил, возвращается в исходное положение.
- (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];
}
Я попробовал несколько вещей, которые "переместили" проблему, но вызвали другие проблемы:
- Отменить автомакет. Это полностью решает его, но теперь я должен начать вычислять и управлять местоположениями и размерами объектов для разных устройств и ориентации.
- Использовать layer.zPosition вместо showSubviewToFront: что объекты появляются над другими объектами, но, по-видимому, избегают "перехода назад", но не позволяют мне изменять иерархию между различными перетаскиваемыми объектами.
Я начал углублять свое понимание Auto Layout, но он становится очень сложным, когда мне кажется, что то, что я ищу, должно быть очень простым; Я видел много методов, которые касаются выполнения "повторной автомашировки", но я не понимаю, как с ними работать.
Есть ли здесь простое решение? как вызов метода, который переопределяет ограничения автоматической компоновки IB и переопределяет их в соответствии с новой позицией UIView?
Любая помощь будет очень оценена.