У меня есть UIView
, и я добавляю много UIImageView
s (пример 5, число является динамическим) в качестве подзонов. все UIImageViews добавлены с NSLayoutConstraint
(sizeToFit и центр, связанный с центром SuperView). Все связанные с центром ограничения добавляются к UIView
(родительский вид).update NSLayoutConstaint view с UIPanGesture
У каждого UIImageView
есть panGesture. поэтому, когда я перемещаю UIImageView
, необходимо обновить связанное с центром ограничение этого UIImageView
.
Вопрос,
Как определить ограничения движущаяся UIImageView
?
(мне нужно сохранить ссылку всех созданных ограничений или есть ли другой способ сделать это?)
Edit: Мой обходной
Благодаря @Lord Жолт для ответа , Я написал код ниже (решение моей проблемы). это может помочь другим, у кого такая же проблема.
определяет как Globale переменных
NSLayoutConstraint *selectedImageViewCenterXconstraint, *selectedImageViewCenterYconstraint;
то метод выбора UIPanGestureRecognizer является:
-(void)moveImageView:(UIPanGestureRecognizer *)recognizer{
UIImageView *senderView = (UIImageView*)recognizer.view;
if (recognizer.state == UIGestureRecognizerStateBegan) {
selectedImageViewCenterXconstraint = nil;
selectedImageViewCenterYconstraint = nil;
NSArray *viewConstraints = self.view.constraints;
for (NSLayoutConstraint *constraint in viewConstraints) {
if ([constraint.firstItem isEqual:senderView]) {
if (constraint.firstAttribute == NSLayoutAttributeCenterX) {
NSLog(@"gotCenterX");
selectedImageViewCenterXconstraint = constraint;
}else if (constraint.firstAttribute == NSLayoutAttributeCenterY) {
NSLog(@"gotCenterY");
selectedImageViewCenterYconstraint = constraint;
}
}
if (selectedImageViewCenterXconstraint && selectedImageViewCenterYconstraint) {
break;
}
}
}
CGPoint translation = [recognizer translationInView:senderView.superview];
CGFloat newXconst,newYconst;
newXconst = selectedImageViewCenterXconstraint.constant + translation.x;
newYconst = selectedImageViewCenterYconstraint.constant + translation.y;
selectedImageViewCenterXconstraint.constant = newXconst;
selectedImageViewCenterYconstraint.constant = newYconst;
[self.view layoutIfNeeded];
[recognizer setTranslation:CGPointMake(0, 0) inView:senderView.superview];
}
Создание свойств для ограничений, которые вы хотите анимировать/есть ссылка на это вполне приемлемо, а не только обходной путь. Этот код выглядит совершенно нормально, если вы получите результат u want. – DBoyer