🎄

camlファイルのメモ(確認済みのみ)(執筆途中)

2023/05/07に公開約5,700字

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

ログインするとコメントできます