center
への外部変更は、s init の後は無視されることbounds
を知っています。transform
UIDynamicItem
transform
しかし、システム内のUIView
それを手動で変更する必要がありUIDynamicAnimator
ます。
を変えるたびtransform
に一気に被ります。
それで、何か考えはありますか?ありがとう。
center
への外部変更は、s init の後は無視されることbounds
を知っています。transform
UIDynamicItem
transform
しかし、システム内のUIView
それを手動で変更する必要がありUIDynamicAnimator
ます。
を変えるたびtransform
に一気に被ります。
それで、何か考えはありますか?ありがとう。
[dynamicAnimator updateItemUsingCurrentState:item]
アニメーション化されたプロパティの 1 つを変更するときはいつでも、動的アニメーターにそれを行ったことを知らせるために呼び出す必要があります。現在の状態に一致するように内部表現を更新します。
編集:以下のコードから、スケールを変更しようとしていることがわかります。UIDynamicAnimator
回転と位置のみをサポートし、スケール (または他のタイプのアフィン変換) はサポートしません。残念ながらtransform
、ローテーションのみを実装するために引き継がれます。私はこれをバグと考えていUIDynamicAnimator
ます (ただし、UIKit ダイナミクスの実装の多くは「バグ」に分類されます)。
できることは、( を呼び出す前にupdateItem...
) 境界を変更し、自分自身を再描画することです。アフィン変換のパフォーマンスが必要な場合は、いくつかのオプションがあります。
CALayer
または サブビューに移動し、そのスケールを変更します (bounds
衝突動作を引き続き機能させる必要がある場合は、一致するように更新します)。<UIDyanamicItem>
するだけです)。NSObject
その後、要求された変換を独自の変換と組み合わせることができます。UIDynamicBehavior の .action プロパティを使用して、アニメーションのすべてのティックで目的の変換を設定することもできます。
UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:item attachedToAnchor:item.center];
attachment.damping = 0.8f;
attachment.frequency = 0.8f;
attachment.action = ^{
CGAffineTransform currentTransform = item.transform;
item.transform = CGAffineTransformScale(currentTransform, 1.2, 1.2)
};
アクション ブロック内にロジックを追加して、いつスケールを変更する必要があるかを決定する必要があります。そうしないと、ビューは常に 120% になります。