タッチ操作で、イラストを拡大・縮小、移動、回転させる

タッチ操作で、イラストを拡大・縮小、移動、回転させる

次に作成するサンプルは、図形を、拡大・縮小、移動、回転させる、マニピュレーション機能を使うものです(図3)。

正方形や円では回転の結果を確認しにくいため、ハート型の図形を使います。この図形はExpression Designで作成し、「XAML Silverlight 4 / WPF Canvas」形式でエクスポートしたものです(図4)。もちろん、このような簡単な図形ではなくExpression Designで作成した本格的なイラストでも、あるいはIllustratorで作成してExpression Designにインポートして調整してからエクスポートしたイラストでも、同様に操作することができます。

図3:ハート型の図形が拡大・縮小、移動、回転する(クリックで拡大)

図4:Expression Designで作成した図形を、WPF用にXAML形式でエクスポートして用いる(クリックで拡大)

では、早速サンプルを作成してみましょう。

「File/New/Project」を選択し、開発言語を指定して(本稿ではVisual Basic)、「WPF Application」を選択し、任意の名前でWPFアプリケーションの新規プロジェクト(ここでは「WPF_touch2」プロジェクト)を作成します。

MainWindow.xamlのソースを開き、先と同様、MainWindowのHeightは500、Widthは700に変更してください。Toolboxの「All WPF Controls」の

コントロールをダブルクリックして1個レイアウトし、PropertiesのLayoutを展開して、Widthに「650」、Heightに「450」、Marginに「0,0,0,0」を指定します。BrushesのBackgroundプロパティにはWhiteを指定しておきましょう。

Expression Designで作成した図形のXAMLコード(ダウンロードファイル中の素材フォルダ内のheart1.xaml)をテキストエディタで開きます(リスト3)。ルート要素の子要素の

要素ごと、Visual Studio 側のXAMLソースのコントロール内に貼り付けます。

リスト3  Expression Designで作成した図形のXAMLコード(heart1.xaml)

貼り付けたら、属性名の接頭辞を削除しておきます。x:NameをNameに変更します。

また、名前が"heart"の

要素を選択し、PropertiesのOtherを展開し、IsManipulationEnabledにチェックを付けて、マニピュレーションを可能にしておきます。さらに、要素に対して、2次元平面での変換を実現する要素を追加して、リスト4のようになるように編集します。

リスト4 編集したXAMLコード(MainWindow.xaml)

イベントの追加とロジックの記述

ここで、イベントを追加します。

2点タッチでは、操作開始時にManipulationStarting、操作中にManipulationDelta、操作完了時にManipulationCompletedイベントが発生します。今回はManipulationStartingとManipulationDeltaを使います。

VS2010のXAMLコード画面が表示されている状態で、”Name”属性値が「heart」である

要素を選択し、PropertiesのEventsを開きます。ManipulationStartingの入力ボックス内をダブルクリックします。

これは、IsManipulationEnabledプロパティにTrueを設定した要素をタッチした時に発生するイベントです。

ManipulationDeltaについても同様の方法で追加します。これは、タッチ操作により蓄積されていく位置の変更情報を格納するイベントです。ManipulationDeltaイベントが発生すると、操作対象オブジェクトを変換することができます。

その上に、リスト5のように、処理を追加していきます。

まず、ManipulationStartingイベント発生時の処理です。図形を変形させるには、ウィンドウから図形までの相対座標が必要なので、ManipulationContainerプロパティにMeを設定して、タッチ操作する位置がWindowからの相対指定となるようにしておきます。

次に、ManipulationDeltaイベント発生時の処理です。マルチタッチで利用できる情報には、回転角度(Rotation)、拡大縮小率(Scale)、平行移動距離(Translation)、指の幅に対する拡大率(Expansion)があります。このうち、今回は、RotationとScaleとTranslationを使います。

変化の基点とする各XY座標値は、ManipulationOrigin.X およびManipulationOrigin.Yでもとめることができます。

リスト5 拡大縮小、回転、平行移動の処理を追加したロジック・コード(MainWindow.xaml.vb)

今回のサンプルでは、図形の動きが分かりやすく速く動くわけでもありませんが、処理によっては移動を制限したり、減速させる必要があります。その場合は、ManipulationDeltaに対して実装可能な、イナーシャ(慣性運動)がサポートされています。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30