2011年05月

2011年05月07日

Windows Phone 7:Tilt Effectを触ってみた

チルトエフェクト? チルトシフトと勘違い



 Windows Phone7のコントロールにチルトエフェクトをかけれるサンプルページがあったので読んでみました。
 最初は勘違いで、チルトシフトのことだと思ってました。

 チルトは「傾ける」という意味で、チルトエフェクトはボタンを押した際などに傾ける効果をつけることなんですね。

 (余談)
 結局関係なかったんでうが、チルトシフトについて、
 チルトシフト=実際の画像にエフェクトをかけることで、ミニチュアのように見せる表現(以下サンプル動画)。

A Tiny Day in the Jackson Hole Backcountry from Tristan Greszko on Vimeo.



導入



 Tilt Effect Overview for Windows Phone
 How to: Use the Control Tilt Effect for Windows Phone
 に使い方が書かれており、実行可能なサンプルもダウンロードできます

 まずはサンプルを開いて挙動を確認してみましょう。

 (余談)
 上記リンク先の上位ページControls for Windows Phoneにそのほか色々なコントロールについて紹介されているので、未読の方はどうぞ。

サンプルを見てみる



 まずはダウンロードしたサンプルを開いてみます。

 001


 プロジェクトのファイル構成はほぼデフォルトですね。
 TiltEffect.csが新しく追加されています(というかほぼこれで全てですね)。

XAMLを修正



 MainPage.xaml.csには手が加えられておらず、
 MainPage.xamlで効果が加えられています。
xmlns:local="clr-namespace:ControlTiltEffect"

 ControlTiltEffectはプロジェクト名ですね。プロジェクト以下のファイル(今回の場合はTiltEffect.cs)を利用する準備。
local:TiltEffect.IsTiltEnabled="True"

 IsTiltEnabledプロパティをTrueに設定します。

 以上のことをphone:PhoneApplicationPageタグに設定すればチルトエフェクトが利用できます。

 できます・・・というか、できてしまうんですね。
 上記修正でボタンやチェックボックスにチルト効果が適応されます。

 適応しないためにはコントロールに
local:TiltEffect.SuppressTilt="True"

 を設定する必要があります。

 Suppressは抑制するっていう意味ですね。
 これでチルトエフェクトを無効化します。

仕組みは?



 これまででチルトエフェクトの使い方は説明しました。
 次はどういう仕組みで実装されているのか見てみましょう。

 使い方さえわかれば良いという向きには不要ですが、
 自分にとってはここからが楽しい時間。

 TiltEffect.csを読み進めると、アニメーションに関する設定値
  const double MaxAngle = 0.3; 

 アニメーションのストーリーボート
static Storyboard tiltReturnStoryboard;

 などが定義されています。

 ですが、今回はコンストラクタとプロパティの変更のみで全コントロールにエフェクトが適応される仕組みに興味があるのでストーリーボードなどのコードは読み飛ばします(UIは興味あるのですが我慢)。

 XAML上であまり操作はしてないから、コンストラクタかIsTiltEnabledをtrueに設定したあたりが怪しいとあたりをつける。
 設定がfalseにもかかわらずコンストラクタで全コントロールを走査するのは無駄っぽいから、IsTiltEnabledの変更時に何かしている可能性が高い、と推測しながらコードを読み進めます。

public static readonly DependencyProperty IsTiltEnabledProperty = DependencyProperty.RegisterAttached(
"IsTiltEnabled",
typeof(bool),
typeof(TiltEffect),
new PropertyMetadata(OnIsTiltEnabledChanged)
);


 依存関係プロパティというやつですね。
 これでXAML上で設定した
local:TiltEffect.IsTiltEnabled="True"

 がトリガーとなってOnIsTiltEnabledChangedが呼び出される雰囲気。

 OnIsTiltEnabledChangedメソッドを追っていくと、
 TryStartTiltEffectメソッドを呼び出してそのなかでグルグル(foreachのこと・・・)している。

foreach (FrameworkElement ancestor in (e.OriginalSource as FrameworkElement).GetVisualAncestors())
{


 FrameworkElementにGetVisualAncestors()なんてメソッドあったっけ?
 と首をひねりますが、ここで昨日までのC#学習がさっそく役に立ちました。

 C#には拡張メソッドという(ややこしさ倍増)機能があるじゃないか!!
 同ファイルを読み進めていくと、
public static IEnumerable GetVisualAncestors(this FrameworkElement node)

 ありました。これですね。

 ここまでわかれば子孫ノードを次々と取得、列挙して返すことがわかります。
 C#に慣れてない方は同メソッドの、
while (parent != null)
{
yield return parent;
parent = parent.GetVisualParent();
}


 yieldの挙動を調べておくと面白いですよ。

 最後は
BeginTiltEffect(element, tiltTouchPoint, elementCenter, centerToCenterDelta);

 でエフェクト開始ですね。
 仕組みがわかってすっきり。

 というわけでチルトエフェクトの紹介でした。

これは?



 似たような効果を紹介しているページがありました

 Metro In Motion Part #4 – Tilt Effect

 コードを見た感じMSのサンプルとはことなるもののようなので興味がある方はどうぞ。





 


 

2011年05月06日

C#らしいC#始めました

惑不まではまだ遠い



 GWも終盤に突入。
 個人的には一週間先取りして京都旅行(兼勉強会参加)してきたので、じっくりC#の書籍に目を通していました。

 ポリシーとして「可読性のために言語に特化した記述はなるべく使わない」というのがあったのですが、

 一個ぐらい特化した言語を持った方が良いよね

 と趣旨を翻し、その言語としてC#を選択。

前半は書籍に目を通して・・・



 後半は手を動かすことにして、手始めに書籍を読み始めたのですが、
 まだまだ力不足、知らない概念やじっくり読まないと理解できないことが多くて、
 本日ようやく読書終了(これからも広い読みして理解を深める必要ありですが)。

 というわけで、読んだ本を紹介。

 プログラミングC# 第5版

 定番ですかね。網羅的にC#を扱っているので、わからないことがあったら、この本を引くと便利。
 広く扱っているので、LINQなどテーマに沿って深く学びたい場合は別の文献をあたるとよさそうです。
 (C#3.0対応なのでC#4.0について知りたい方も別の書籍を)

 


 Effective C# 4.0

 個人的には難易度的に非常に良い本でした。
 作法からパフォーマンスまで、C#4.0のDynamicやPLINQも扱っておりためになりました。

 勉強になったと同時に、勉強不足を痛感した一冊でした。




 [完全版] 究極のC#プログラミング ~新スタイルによる実践的コーディング

 以前に購入した本でしたが、再読。
 前回は理解不十分な所も今回で大分カバーできました。



Windows Phone 7開発者の一人前は遠い・・・



 C#をマスターして、Silverlightを学んで、Windows Phone 7のデバイスや拡張を知る。
 一人前の開発者への道は遠いですねぇ。

 さぁ、GW後半戦は手を動かして行こう!!

Profile

シーラカンス

Recent Comments
QRコード
QRコード
livedoor Readerに登録
RSS
livedoor Blog(ブログ)