日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。
日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。
ImageStoreはiOSで画像を非同期ダウンロードするためのObjective-Cライブラリです。Satoshi Nakagawaさんがオープンソースのライブラリとして公開されています(New BSDライセンス)。手軽に使えて非常に便利なライブラリなのですが、そのままアプリに組み込むには少々難があります。 ダウンロードをキャンセルする手段がない ImageStoreのインスタンスを破棄する以外に、キャッシュをクリアする方法がない 正常に画像がダウンロードできたかどうか判定する術がない 1がないので、ダウンロード中に画面移動が発生したりすると容易にクラッシュします。2がないので、随時キャッシュを消して再ダウンロードしたり、メモリ不足時にキャッシュを削除したりといったことができません。3のため、サーバが404を返した場合等にはリクエストが無限ループしてしまう危険があります(ImageSto
1枚の画像を回転させるアニメーションを実現したい。UIView の transform プロパティを使うと非常に簡単にできることがわかった。 サンプル 初期状態。ここで start を押すと ※画像入手元および画像作者 入手元:Arrow, Up icon | Icon Search Engine 作成者: Kyo Tux (ホームページ kyo-tux on deviantART) これを UIImageView.image に設定し、transformプロパティを使って回転させる。こんな感じ。 - (IBAction)start:(id)sender { self.imageView.transform = CGAffineTransformMakeRotation(0); [UIView animateWithDuration:0.2 animations:^{ self.image
単純なものなら、下の図のように startLayer と batonLayer が baseLayer 内で切り替わることで十分表現できる。 後は、反応時間を表示するために startLayer の文字列を置き換えられれば完璧か? となると、調べることは CATextLayerの文字列は変更可能か CALayerは表示したり隠したりできるか の2点になる。 文字列はstringを再設定できるかってことになるし、表示/非表示はCore Animation プログラミングガイド 日本語訳版にそれらしい項目として hidden があった。 さっそく実験してみましょう。 今回はawakeFromNibで全レイヤの準備をして、クリックで呼び出されるtestで表示状態を切り替える。そのための状態変数は running をそのまま利用。 こいつが TRUE の時は batonLayer を表示している状
モーダルビュー呼び出し側のUIViewControllerは、モーダルビューが画面から消えるまでユーザーとの会話はできない。 そのためモーダルビューがユーザーによって設定されて画面から消えるのか、キャンセルされて消えるのかを知る方法が必要になる。 この方法として、iPhoneアプリではCocoaでの常套パターンであるDelegateパターンを利用することが推奨されている。 実際、システムが提供する画像選択用コントローラであるUIViewControllerのUIImagePickerControllerやアドレス帳を参照するためのコントローラABPeoplePickerNavigationControllerでは設定されたかキャンセルされたかを知るためにDelegateパターンが利用されている。 それにならい、このドリルでもDelegateパターンを利用する。 Delegateパターンとは
最終的にこんな画面に。この一つ一つのマスがばらばらと表示されてくる感じのものを作る。 スレッド処理として以下のようなNSOperationのサブクラスを作る。CALayerを追加時にはopacityを0.0fにしておくので、アニメーションは0.8f秒かけて単純に透明度を1.0fにするだけ。いろいろとハードコーディングしてあるが、気にしないよう。 #import "TTView.h" #import <QuartzCore/QuartzCore.h> @interface TTOperation : NSOperation { CALayer *layer; } @property (retain) CALayer *layer; @end @implementation TTOperation @synthesize layer; -(void) main { [CATransaction
レイヤのコンテンツ全体に作用するエフェクトを実行する場合は、Core Animation Transitionを利用するのが便利です。Core Animationは色々複雑なことが出来るようですが、今のところアニメーション関連はUIViewのクラスメソッドとこのCATransitionで事足りています。 CATransitionは、UIViewアニメーションのようにブロック単位で動作を指定するのではなく、レイヤ全体が対象となります。ですので、下記のように記述しておけば次回画面が描画されるタイミングで、指定したレイヤに対してアニメーションが実行されます。 // QuartzCoreが必要 #import <QuartzCore/QuartzCore.h> ... - (void) startTransition { CATransition *animation = [CATransitio
iOS/iPhone/iPad/MacOSX プログラミング, Objective-C, Cocoaなど UITableView を下にドラッグした時に画面上部の矢印が下向き↓からクルッと回転して上向き↑になるアニメーションが起こる。これを iPhoneで実行してみるとカクっとひっかかるような感じがあった。コードはこんな感じ。 [UIView animateWithDuration:0.2 animations:^{ self.imageView.transform = CGAffineTransformMakeRotation(endAngle); }];Blocks によるアニメーションを使っている。 beginAnimations 先日この件で Kyasu さんより情報提供があった。 kyasu says: 2011年8月18日19:43 >プルダウンしてアニメーションが起きる時に若
objective-cで独自クラスインスタンスをシリアライズするには、シリアライズしたいクラスにてNSCodingプロトコルに準拠する必要があるようです。具体的には、下記のメソッドを追加してあげて、独自プロパティがあればそれらを適切に処理してあげればOKらしいです。 例)NSDictionaryのサブクラスをシリアライズしたいとき。 これができれば、例えばプログラムの設定とかをまるっとファイルに書き出したりできちゃうわけです。しかも荻原本(「詳細Objective-C2.0」のことね)によると、Foundationフレームワークで作成されるアーカイブされたものは、PowerPCでもIntelでもOKとのこと。まじかー。 1.NSCodingに準拠する。具体的には下記2つのメソッドを追加 ※独自プロパティはhogeRect, hagoPointがあって、それらもシリアライズすることにする /
Mac OS X や iPhone プログラミングでは、任意のクラスを NSData 型に変換するための NSCoding インターフェイスが用意されています。 このインターフェイスを実装することで、独自実装のクラスであっても、統一的な方法で、インスタンスの内容を NSData 型に変換することが出来るようになります。 NSString や NSDictionary, NSArray といった Foundation クラスの多くが NSCoding を実装しているので、同様の方法で NSData 型に変換することも可能です。 NSData への変換方法 まず、変換方法について記しておきます。 NSCoding インターフェイスを実装したクラスのインスタンスは、NSKeyedArchiver や NSKeyedUnarchiver を利用して、NSData 型との相互変換が可能になります。
NSCodingプロトコルについてはコラム「アーカイブ」で説明しているので、不明な点があればそちらも読んでみて下さい。 インターフェイスファイルの実装 RepeatingMotifがNSCodingプロトコルに準拠している事を宣言するため、インターフェイスファイルのスーパークラスの後に宣言を追加します。 @class MasterMotif; @interface RepeatingMotif : NSObject <NSCoding> { int masterWidth,masterHeight; int symmetryTypeIndex,strokeWidth; BOOL fillBackground,stroke,fill,flipX,flipY,swapXY; NSColor *strokeColor,*fillColor,*backgroundColor; MasterMoti
November 15, 2010 コレクションのコピー 『はじめてのiPhoneプログラミング』の本文中で、『NSMutableCopyingのコピーは浅いコピーなので〜』の説明が足りない気がしたので調べてみました。 オブジェクトのコピーとしては『浅いコピーと深いコピー』として『詳解 Objective-C 2.0』に解説があるのですが、辞書の場合についてもう少し知りたくて検索した所『Collections Programming Topics』というリファレンスがありましたので、『Copying Collections』の項を訳してみます。 ●コレクションのコピー オブジェクトのコピーには浅いコピー(Shallow copy)と深いコピー(Deep copy)の二種類があります。 通常のコピーは浅いコピーで、新しく生成したコレクションの所有権は元のオブジェクトと共有しています。 深いコ
前回は、Prototypeパターンの基本的な実装を紹介した。その結果、ある意味当然だが、Prototypeパターンではオブジェクトのコピーが重要な事が分かったと思う。 そこで、今回はObjective-CとCocoaにおける、コピー機能の紹介をしよう。非常に基本的な機能なのだが、議論すべき点はたくさんある。 単純なコピー まず、最も単純なコピーから考えてみよう。コピーする対象はオブジェクトなのだが、いくらオブジェクトといっても所詮はメモリ上のデータなので、同じサイズのメモリ領域を確保して値をコピーしてやれば、コピーは完了する。Objective-CはC言語とのハイブリッドなので、mallocとmemcpyを使えばいい。 といっても、それでは原始的すぎるので、Cocoaではオブジェクトの単純なコピーをサポートする関数が用意されている。NSCopyObjectだ。定義は次のようになる。 Lis
Mac OS X や iPhone プログラミングで、NSString や NSArray, NSDictionary といった一般的なクラスには copy メソッドが実装されていて、インスタンスの複製を行うことが出来るようになっています。 もっとも、NSDictionary や NSArray といった copy メソッドでは、"シャローコピー" といって、保持しているインスタンスを retain で複製する方式がとられるようなので、コピー後にもとになった配列の要素値を変更したりするとコピー先も変更されたりするため、コピーの感覚が思っているものと少し違うかもしれません。 一般的な感覚では、copy というのはすなわち、各インスタンスの複製をとる "ディープコピー" が自然な挙動に思えます。 コピーの際の挙動はともかくとして、独自に実装したクラスでも NSCopying インターフェイスを
UITableViewの使い方めも その2。 iOSでテーブルを表示するUI、UITableViewクラスについてもう少し詳しい使い方。 テーブルビューの表示のカスタマイズ UITableViewのカスタマイズ 基本的にInterface Builderで設定できるため、xibのほうで設定するのがいいと思います。 Interface Builderを利用しないときは、(void)viewDidLoadなどの、viewのアイテムを初期化する時に設定するようにします。また、UITableViewのメソッドで設定するパラメータは、そのテーブルのセルすべてに適用されます。 背景色を設定する [myTableView setBackgroundColor:[UIColor greenColor]]; 背景画像を設定する // 背景画像 UIColor* col = [[UIColor alloc]
UITableViewの使い方2:編集モード編 UITableViewの編集モードで行の挿入・削除・移動を行う方法の説明です。 English top page UITableViewの編集モード ナビゲーションバーなどに編集ボタンを用意すると、そのボタンを押すことでUITableViewを編集モードへ移行させることができます。 編集モードでは新しくセルを挿入したり、今あるセルを削除したり、セルの順番を入れ替えたりと様々な操作を行うことが出来ます。 ここではUITableViewの編集モードの動作設定に使われるメソッドを説明してゆきます。 UITableViewの使い方1と同様にUITableViewはInterface Builder側で作っていて、UITableViewのdataSourceやdelegateがUITableViewControllerに設定されているものとして話を進め
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く