camlファイルのメモ(確認済みのみ)(執筆途中)
camlのドキュメントがどこにもないので。
基本的な
一枚の画像を表示する。
<?xml version="1.0" encoding="UTF-8"?>
<caml xmlns="http://www.apple.com/CoreAnimation/1.0">
<!-- 画像を表示 -->
<CALayer>
<contents type="CGImage" src=""/>
</CALayer>
</caml>
2枚以上の画像を表示する。
CALayerには一つの要素しか入らない。
<?xml version="1.0" encoding="UTF-8"?>
<caml xmlns="http://www.apple.com/CoreAnimation/1.0">
<!-- 画像を表示 -->
<CALayer>
<sublayers>
<contents type="CGImage" src=""/>
<contents type="CGImage" src=""/>
</sublayers>
</CALayer>
</caml>
色々使えるプロパティ。
<?xml version="1.0" encoding="UTF-8"?>
<caml xmlns="http://www.apple.com/CoreAnimation/1.0">
<!-- 画像を表示 -->
<CALayer プロパティ名="" プロパティ名="">
<contents type="CGImage" src="" プロパティ名=""/>
</CALayer>
</caml>
bounds: 幅と高さ
例: bounds="width height"
bounds="100 200"
position: 場所
例: position="x座標 y座標"
position="100 200"
hidden: 非表示 0 or 1
例: hidden="0 or 1"
hidden="1"
backgroundColor: 背景色。 rgbを指定できる。1が最大なので各値を255で割ってください。
例: backgroundColor="r g b"
backgroundColor="1 1 1"
transform: 回転
例: transform="scale(x, y, z)"
transform="scale(0.35, 0.35, 1)"
opacity: 不透明度 0 ~ 1
例: opacity="0 ~ 1"
opacity="0.5"
id: アニメーションで使う(次項)
例: id="#chikuwan"
name: アニメーションで使う(次項)
例: name="chikuwan"
状態遷移
以下は状態遷移で画像を切り替えるための最小コードです。
statesで状態ごとのプロパティの状態を指定します。
<?xml version="1.0" encoding="UTF-8"?>
<caml xmlns="http://www.apple.com/CoreAnimation/1.0">
<CALayer>
<!-- 画像を表示 -->
<sublayers>
<contents type="CGImage" src="./01.png" id="#1"/>
<contents type="CGImage" src="./02.png" id="#2"/>
</sublayers>
<!-- 状態ごとのプロパティの状態 -->
<states>
<!-- locked のとき -->
<LKState name="locked">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
<LKStateSetValue targetId="#2" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<!-- unlocked のとき -->
<LKState name="unlocked">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
<LKStateSetValue targetId="#2" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
</states>
</CALayer>
</caml>
statesで状態ごとのプロパティの状態を定義しています。
状態遷移 + 切り替わりアニメーション
以下は状態遷移に切り替わりアニメーションを追加した最小コードです。
stateTransitionsでアニメーションを指定します。
<?xml version="1.0" encoding="UTF-8"?>
<caml xmlns="http://www.apple.com/CoreAnimation/1.0">
<CALayer>
<!-- 画像を表示 -->
<sublayers>
<contents type="CGImage" src="./01.png" id="#1"/>
<contents type="CGImage" src="./02.png" id="#2"/>
</sublayers>
<!-- 状態ごとのプロパティの状態 -->
<states>
<!-- locked のとき -->
<LKState name="locked">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
<LKStateSetValue targetId="#2" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<!-- unlocked のとき -->
<LKState name="unlocked">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
<LKStateSetValue targetId="#2" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
</states>
<!-- 状態遷移アニメーションの定義 -->
<stateTransitions>
<!-- locked から unlocked になるときのアニメーション -->
<LKStateTransition fromState="locked" toState="unlocked">
<elements>
<LKStateTransitionElement key="opacity" targetId="#1">
<animation type="CABasicAnimation" keyPath="opacity" duration="1" />
</LKStateTransitionElement>
<LKStateTransitionElement key="opacity" targetId="#2">
<animation type="CABasicAnimation" keyPath="opacity" duration="1" />
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<!-- unlocked から locked になるときのアニメーション -->
<LKStateTransition fromState="unlocked" toState="locked">
<elements>
<LKStateTransitionElement key="opacity" targetId="#1">
<animation type="CABasicAnimation" keyPath="opacity" duration="1" />
</LKStateTransitionElement>
<LKStateTransitionElement key="opacity" targetId="#2">
<animation type="CABasicAnimation" keyPath="opacity" duration="1" />
</LKStateTransitionElement>
</elements>
</LKStateTransition>
</stateTransitions>
</CALayer>
</caml>
CABasicAnimation は一般的なアニメーション。
CASpringAnimation はバネのようなアニメーション。
時間がある時に
CAEmitterCell (パーティクルの発生)、
animations について追記予定
ーーーーーー
keyPath で transform="scale(0.35, 0.35, 1)" のような複雑なプロパティを指定するには
keyPath="transform.rotation.z"
Discussion