ので、私はいくつかのレイアウト上の制約をアニメーション化しようとしていると悲惨な運を持っています、私はちょうど何も見えいけないし、私はそれは同時になど、すべての制約を満たすことができないかというエラーメッセージが表示されますプログラムによるNSLayoutConstraintアニメーションの問題
私はPullableViewと呼ばれるクラスを使用しています。そのアニメーションは古いスタイル[UIView commitAnimation]
を使用していますので、サブクラス化して、制約をアニメーション化するためのコードを追加しました...そのような運とそれをアニメーション化するか、何かの難しさを証明している私はちょうど "同時に制約を満たすことができません" ..問題は、私はかなりこの制約のビジネスに新しいので、私はどこから始めるべきか分からないだろう。
ここにエラーがあります。もう1つはほぼ同じですがcenterYです。当然の
"<NSLayoutConstraint:0x7c8a3a0 StyledPullableView:0x905a9b0.centerX == UIView:0x9054680.centerX>", "<NSLayoutConstraint:0x7c6b480 StyledPullableView:0x905a9b0.centerX == UIView:0x9054680.centerX + 128>"
I任意のヘルプ感謝この
を呼び出す前に[pullRightView setTranslatesAutoresizingMaskIntoConstraints:NO];
を行います。
- (void)setOpenedForConstraints:(BOOL)op animated:(BOOL)anim
{
opened = op;
if (anim)
{
NSLayoutConstraint *constraintX = [NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:_parentView
attribute:NSLayoutAttributeCenterX
multiplier:1
constant:0];
NSLayoutConstraint *constraintY = [NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:_parentView
attribute:NSLayoutAttributeCenterY
multiplier:1
constant:0];
[_parentView addConstraint:constraintX];
[_parentView addConstraint:constraintY];
constraintX.constant = opened ? self.openedCenter.x : self.closedCenter.x;
constraintY.constant = opened ? self.openedCenter.y : self.closedCenter.y;
}
if (anim)
{
// For the duration of the animation, no further interaction with the view is permitted
dragRecognizer.enabled = NO;
tapRecognizer.enabled = NO;
//[UIView commitAnimations];
[UIView animateWithDuration:animationDuration
animations:^
{
[self layoutIfNeeded];
}];
}
else
{
if ([delegate respondsToSelector:@selector(pullableView:didChangeState:)])
{
[delegate pullableView:self didChangeState:opened];
}
}
}
おかげで、私はこれらを通じて探求します私はinit関数でそれを行うが...私も...新しいものを追加する前に、すべての制約を削除... – Genhain
私はそれがだと思う@Genhain追加や削除よりも制約を変更する方がはるかに簡単です。最初にビューに対して定義した制約は非常に注意してください。たとえば、私はそれを左にスライドさせようとしていた場合、上、下、左、および幅で定義されていましたが(しかし右ではありません)、左の制約の定数を変更することでアニメーション化できます。改訂版の回答を参照してください。私はあなたが望んでいるUXがあなたのコードサンプルであったものを解読することができなかったと告白しなければならないので、何を達成しようとしているのかを明確にすればもっと役に立ちます。 – Rob
偉大な答えですが、最初のリストの第2ポイントが間違っています。 layoutIfNeededのみがアニメーションブロック内になければなりません。 – jrturton