jxugc #16 xamarin.forms custom renderer ハンズオンの前説

13
Xamarin.FormsViewRenderer についての解説 JXUGC #16 Xamarin.Forms Custom Renderer ハンズオン 2016/8/10 @ticktackmobile #JXUGC

Upload: p3ppp

Post on 22-Jan-2018

108 views

Category:

Technology


3 download

TRANSCRIPT

Xamarin.Formsの

ViewとRendererについての解説

JXUGC #16 Xamarin.Forms Custom Renderer ハンズオン

2016/8/10

@ticktackmobile

#JXUGC

自己紹介

Xamarin.Forms Preview版の新機能解説するマン

手書きXAMLer

第七駆逐隊推し

Twitter: @ticktackmobile

GitHub: P3PPP

#JXUG

最近は艦これアーケードの設置店舗を表示するWebサイト を作ったりしました。

この資料について

【Xamarin.Forms】ViewRendererと仲良くなるための簡易チュートリアル - ぴーさんログという私のブログ記事を元にしたハンズオン企画の前説です。

イベントページ

JXUGC #16 Xamarin.Forms Custom Renderer ハンズオン - dots. [ドッツ]

#JXUG

Xamarin.FormsのRendererとは?

Xamarin.Formsのコントロール(抽象化されたView層)とネイティブプラットフォームのコントロールを結びつける仕組み。

Rendererはネイティブ側で、XFコントロールとネイティブコントロールの仲介役となる。(プロパティ変更の伝達など)

Xamarin.Formsの標準コントロールもこの仕組みで実装されている。

#JXUG

Button

ButtonRenderer UIButton

ButtonRenderer Button

ButtonRenderer Button

全てのコントロールには対応するRendererが存在する

Xamarin.Forms View – Renderer - Native Controlの対応表

#JXUG

iOS

Android

UWP

XF

RendererもネイティブプラットフォームのView要素である

#JXUG

コンテナ系のコントロールから派生している

UIView

VisualElementRenderer

ViewRenderer<TV, TNV>

ViewGroup

VisualElementRenderer

ViewRenderer<TV, TNV>

Panel

VisualElementRenderer

ViewRenderer<TV, TNV>

AndroidiOS UWP

Rendererを扱う動機

標準コントロールの振る舞いやレイアウトの変更

Xamarin.FormsでButtonのImageが真ん中からズレる問題| ぅゎょぅι゛ょっょぃ

Custom Rendererを定義して既定のレイアウトを変更することで回避。

#JXUG

Rendererを扱う動機

新規コントロールの追加

ネイティブプラットフォームの素敵コントロールの移植

NControl

NGraphicsというクロスプラットフォームなベクタグラフィクスライブラリのカンバスを抱えたXamarin.Formsコントロール

#JXUG

Effects

後付けでネイティブコントロールをカスタムする仕組み。EffectはXF側とネイティブ側にアクセス可能。XF 2.1.0 ~

使い方

1. ネイティブプラットフォームでEffectを定義する

PlatformEffectを継承する

OnAttachedにカスタマイズ処理やイベント購読を書く

OnDettachedにイベント解除などを書く

2. PCL側でViewやPageにEffectを付加する

#JXUG

EffectsとCustom Rendererの比較

どちらもネイティブコントロールをカスタムする手段

Effectsはネイティブコントロールの生成に関与できない

例えば、UIButtonのStyleはインスタンス生成時に決定するのでEffectでは変更不可能。(Buttonを画像ボタン化するEffect

は作れない)

Effectの方が再利用性が高い

例えば、Viewにドロップシャドウを付加するEffectは派生先のButtonやLabelに対しても効果がある。

#JXUG

Effectsおまけ

Effectsでプロパティを持たせたい場合はAttached Property

と組み合わせると良い。(ドロップシャドウの大きさ とか)

Using Effects - Xamarin.Forms Complete

#JXUG

ハンズオン内容

ViewRenderer<TView, TNativeView>を使って新規コントロールを実装します。

BoxViewもどきの実装

XFコントロールのプロパティをネイティブコントロールに反映させる方法を学びます。

ネイティブコントロールのイベントをXFコントロールのイベントにする方法を学びます

WebViewもどきの実装

FXコントロールからネイティブコントロールのAPIを呼び出す方法を学びます。

#JXUG

よく分かるViewRenderer<TView, TNativeView>の図

ViewRenderer

TNativeView

#JXUG

TView参照 内包

ネイティブ側Xanarin.Forms側

ハンズオン手順へGO!