最近、UIDynamics を使用して画像ビューを所定の位置にアニメーション化しました。ただし、自動レイアウトの y-pos 制約が画面外に設定されていたため、画面から離れてから画面に戻ると、画像ビューが再び画面外に配置されていました。アニメーションには約 3 秒かかったので、3 秒後に制約をリセットしました。それは少しハッキーに感じます。
私の質問はこれです: autolayout と UIDynamics を同時に処理する適切な方法は何ですか?
最近、UIDynamics を使用して画像ビューを所定の位置にアニメーション化しました。ただし、自動レイアウトの y-pos 制約が画面外に設定されていたため、画面から離れてから画面に戻ると、画像ビューが再び画面外に配置されていました。アニメーションには約 3 秒かかったので、3 秒後に制約をリセットしました。それは少しハッキーに感じます。
私の質問はこれです: autolayout と UIDynamics を同時に処理する適切な方法は何ですか?
このチュートリアルでは、Geppy Parziale によって提供された優れたソリューションがあります。
基本的に、UIDynamicItem に準拠するオブジェクトを作成できます。
@interface DynamicHub : NSObject <UIDynamicItem>
@property(nonatomic, readonly) CGRect bounds;
@property(nonatomic, readwrite) CGPoint center;
@property(nonatomic, readwrite) CGAffineTransform transform;
@end
境界を初期化する必要があるか、クラッシュします。
- (id)init {
self = [super init];
if (self) {
_bounds = CGRectMake(0, 0, 100, 100);
}
return self;
}
次に、そのオブジェクトで UIDynamics を使用し、中間値を使用して制約を更新します。
DynamicHub *dynamicHub = [[DynamicHub alloc] init];
UISnapBehavior *snapBehavior = [[UISnapBehavior alloc] initWithItem:dynamicHub
snapToPoint:CGPointMake(50.0, 150.0)];
[snapBehavior setDamping:.1];
snapBehavior.action = ^{
self.firstConstraint.constant = [dynamicHub center].y;
self.secondConstraint.constant = [dynamicHub center].x;
};
[self.animator addBehavior:snapBehavior];