objc.io publishes books, videos, and articles on advanced techniques for iOS and macOS development.
Appleが提供しているプログラミングガイドは全部読んだほうがいいなーと思っています。 目下、興味のあるところから順次読み込み中。 今回は[PDF] Core Animationプログラミングガイドを読んだので、覚えておいたほうがいいところとかをピックアップし、自分なりの考察なんかを加えて書いています。 UIView/CALayerの基本構造 画面になにかを表示しようとした時、使うのはUIViewかそのサブクラスを使うのが通常です。 addSubview:メソッドなど使って階層構造を成して構築していきますね。 普通はUIViewを使えば問題ありませんが、描画のパフォーマンスやちょっとした細かい演出などをしたい場合はCALayerを利用します。 やはりどういう構造になって画面に表示されているか、を知るのは大事なことですね。 UIViewは通常、レンダリング周りを担当するCALayerクラスを
It has been quite a while since I wrote the last article in the Core Animation Games series. If you remember, in it I complained bitterly about the CA scrolling classes, and how none of them filled the ticket. To recapitulate, these are the 3 things I needed: A window into a coordinate system plane populated by “objects”… that smoothly moves through it by remapping how its borders map to that unde
Q: How do I pause all animations in a layer tree? A: In order to pause animations in a layer tree, you can take advantage of the fact that a CALayer conforms to the CAMediaTiming protocol. The CAMediaTiming protocol defines, among other things, a speed with which its timeline progresses, which you can use to pause all animations on the target layer. Listing 1 demonstrates how you can do this. List
CALayerはプロパティを変更した際に、いい感じにアニメーションをつけてくれます。特に手を入れることなくちょっとだけリッチな感じにすることができるのですが、逆にアニメーションさせたくないときもあるはずです。 これはCATransactionを使えば簡単に解決できます。 [CATransaction begin]; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; layer.frame = CGRectMake(x, y, w, h); [CATransaction commit]; beginとcommitの間に書かれたプロパティの変更に関してはアニメーションが無効になります。例では1つのCALayerのプロパティのみを変更していますが、複数まとめて書くことも可能です。
iTunesのCoverFlowのように反射している感じにするのを、 CALayerを使ってやってみました。 まず、ベースとなる正方形を用意します。 - (void)viewDidLoad { [super viewDidLoad]; // 背景色を黒 self.view.backgroundColor = [UIColor blackColor]; // ベースになるCALayer CALayer* layer = [CALayer layer]; layer.backgroundColor = [UIColor whiteColor].CGColor; layer.bounds = CGRectMake(0, 0, 100, 100); layer.position = CGPointMake(160, 200); [self.view.layer addSublayer:laye
UIView(を継承する全てのクラス)に対して、CALayerを利用して下線を引きます。 デフォルトでは、UIViewに右下がりの白い斜線が表示されます。 必要に応じて、drawInContext内を変更して利用してください。 表示すると次のようになります。(IB上でDrawLineクラスを指定し、背景色を黒で指定しています) 変更によって下線を引いたり、一部にだけ枠を付けることが可能です。 //次をコードに追加します #import <QuartzCore/QuartzCore.h> @interface LineLayer : CALayer @end @implementation LineLayer - (void)drawInContext:(CGContextRef)ctx { CGMutablePathRef path = CGPathCreateMutable(); //配
「もし君が、iPhoneのプログラミングをやってるんなら、UIViewに詳しいよね。ボタンとか、テキストとか、スライダーとか、Webビューとか、UIviewのサブクラスなら、何でも来いなんだろ?」、、、えっ?うっ、うん。 でも、実はUIViewのテクノロジーが実はCALayerから来てたって知ってましたか?少なくとも、僕は知りませんでした、はい。結構長い間、、、orz “CALayer”について少し知っておく事は、決して無駄ではありません。だって、カッコいいビジュアル•エフェクトが簡単に作れてしまうんですから。ついでに、”Core Animation”の事を掘り下げて勉強しておくのもすごくいい事なんです。まぁ、でも”Core Animation”については、また別の機会に。 このチュートリアルでは、”CALayer”の基本を学ぶ事によって、”layer”なる物を作っていったいそれがどういう
8/19担当、Qiita初投稿の@inamiyです、こんにちは。 今回は、iOS/OSXアプリのUXの根幹である「Core Animation」について、 ハマりやすい点や、意外と知られていないtipsなどについて書きたいと思います。 アニメーション完了時のコールバック Delegateでif分岐しながら処理する方法もありますが、 [CATransaction setCompletionBlock:]を使う方が、より見通しの良いコードになります。 問題は、アニメーションが正常終了したかどうかのfinishedフラグがないという点ですが、 下記のようなコードを書くと、上手く判別できます。 [CATransaction begin]; [CATransaction setCompletionBlock:^{ CAAnimation* animation = [layer animationFo
データのダウンロード中など待ち状態のときに、画像をくるくる回して読み込み中だということを表したいことってありますよね。アニメーション GIF や複数の画像の切り替えでも表現できますが、今回は1枚の画像を Core Animation の transform プロパティを使って回す方法を紹介したいと思います。 まず、アニメーションには CABasicAnimation を使います。作成するときに、animationWithKeyPath に transform をセットします。 つぎに、回転のはじめと終わりの角度を設定します。時計回りの場合は fromValue を 0、toValue を 2π にします。反時計回りと場合は fromValue と toValue の値を入れ替えてください。 そして、valueFunction で回転軸を決めます。今回は z 軸で回転させたいので、kCAVa
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く