をあなたがTweetStationの「スワイプ」のセルのためのソースコードを見ることができます実行サポートは、一度にアニメーションをVARIOS:
- が、それがアイコンでフェード右
- にセルをアニメーション化
これは、アイコンが成長し、その後、戻って自分のサイズに
- をスケーリング可能
- は、これらのすべてが単一のトランザクションで実行されている以前の既存のメニュー
をバウンス。ソースコードはである:
https://github.com/migueldeicaza/TweetStation/blob/06e2ae5484103a85660201592bd7f06fb1b69395/TweetStation/UI/SwipeSupport.cs
アニメーションは、実際にさまざまな場所に分散しています。 SwipeMenuViewは、コンストラクタで独自のアニメーション(背景にアイコンをフェードアウトさせ、アイコンを拡大/縮小)を設定し、アニメーションはCAAnimationGroupに追加され、結果のアニメーションはlayer.AddAnimation(group)を使用してレイヤーに追加されます。
このメソッドのコードスニペットここで:アニメーションの他の部分はShowMenuに構成されている
var alpha = (CAKeyFrameAnimation) CAKeyFrameAnimation.FromKeyPath ("opacity");
alpha.Values = new NSNumber [] {
NSNumber.FromFloat (0),
NSNumber.FromFloat (0.1f),
NSNumber.FromFloat (1),
};
alpha.KeyTimes = new NSNumber [] {
NSNumber.FromFloat (0),
NSNumber.FromFloat (1f/(layers.Length-i)),
NSNumber.FromFloat (1),
};
var size = (CAKeyFrameAnimation) CAKeyFrameAnimation.FromKeyPath ("transform.scale");
size.Values = new NSNumber [] {
NSNumber.FromFloat (0.7f),
NSNumber.FromFloat (1.3f),
NSNumber.FromFloat (1),
};
var group = CAAnimationGroup.CreateAnimation();
group.Animations = new CAAnimation [] { alpha, size /*, pos */ };
group.Duration = delay;
layer.AddAnimation (group, "showup");
、その一方が画面の外に細胞をスワイプし、既にあった場合、メニューが表示さ、それセルをアニメーションして、新しい位置に戻します。
ShowMenuがUIView.BeginAnimationsで区切らトランザクションブロックの変更()とUIView.CommitAnimationsグルーピングによるアニメーション:単に
CAAnimation MakeBounceAnimation (float offset, string key)
{
var animation = (CAKeyFrameAnimation) CAKeyFrameAnimation.FromKeyPath (key);
animation.Duration = hideDelay;
float left = offset/2;
animation.Values = new NSNumber [] {
NSNumber.FromFloat (offset+left),
NSNumber.FromFloat (left-30),
NSNumber.FromFloat (left+10),
NSNumber.FromFloat (left-10),
NSNumber.FromFloat (left),
};
return animation;
}
AnimateBack方法:
UIView.BeginAnimations ("Foo");
UIView.SetAnimationDuration (hideDelay);
UIView.SetAnimationCurve (UIViewAnimationCurve.EaseInOut);
var animation = MakeBounceAnimation (Math.Abs (offset), "position.x");
foreach (var view in menuCell.ContentView.Subviews){
if (view == currentMenuView)
continue;
view.SetNeedsDisplay();
AnimateBack (view, animation);
}
AnimateBack (menuCell.SelectedBackgroundView, animation);
UIView.CommitAnimations();
は、メニューアニメーションがバウンス効果を有するように作成され
void AnimateBack (UIView view, CAAnimation animation)
{
var b = view.Bounds;
view.Layer.Position = new PointF (b.Width/2, b.Height/2);
view.Layer.AddAnimation (animation, "position");
}
私はCATransactionとAnimationを扱うのに慣れていませんが、上記のコードが1つのレイヤーで動作する場合、おそらくスレッドを使用してMovを実行できます両方のビューのePos()メソッドを同時に使用できます。 HTH – psycho