タグ

ブックマーク / blog.kishikawakatsumi.com (11)

  • SwiftマクロでPowerAssertを実装する - 24/7 twenty-four seven

    現在Swiftにマクロを導入しようという提案がSwift Evolutionのレビュー中*1です。 SwiftによってSwiftの構文を拡張できる、いわゆるメタプログラミングと呼ばれる機能です。 実はマクロの他にもSwiftでメタプログラミングを実現する機能の提案が複数提案*2*3されています。 Swift 6はメタプログラミングの時代になるかもしれません。 現代的なプログラミング言語のマクロ みなさんはマクロと聞いて、どのような機能を想像しますか? C言語のマクロは、プリプロセッサと呼ばれるコンパイル前のプログラムによってプログラムのソースコードに置換や文字列連結を行う機能でした。 原理的には単なる文字列操作なので、プログラムの構造や型を破壊する可能性がありました。 最初のマクロに関する投稿に対しての否定的なコメントは、C言語のマクロのような機能をSwiftに導入することは危険だという意

    SwiftマクロでPowerAssertを実装する - 24/7 twenty-four seven
    chiqashi
    chiqashi 2023/01/01
  • SceneKitとCALayerで作る3Dのスライドショー - 24/7 twenty-four seven

    大型ディスプレイに投影するデジタルサイネージを作る仕事をしました。 できあがったのがこれです。 github.com まず、アートディレクターと相談して、下記の映像を参考にして3D空間を飛び回るようなスライドショーでいこうと決めました。 www.youtube.com www.youtube.com 最初のプロトタイプはCALayerだけで作りました。 CALayerは3Dの変形をサポートしていて、かつmacOSのCALayerではCore Imageのフィルタがエフェクトに使えるので、各層のレイヤーに次のように書くだけで遠くなるにつれてブラーをかけてぼやかせる、ということが簡単に実現できます。 let frontLayer = CALayer() frontLayer.frame = layerFrame if let filter = CIFilter(name: "CIGaussia

    SceneKitとCALayerで作る3Dのスライドショー - 24/7 twenty-four seven
    chiqashi
    chiqashi 2019/04/15
  • Auto Layoutの静的な制約で実現する伸び縮みするヘッダービュー - 24/7 twenty-four seven

    TL;DR, 優先度の異なる複数の制約を同時に定義することで、静的な定義だけで動的な振る舞いを実現できる 動的な要素の少ない構造のビューはより堅牢である はじめに 読みやすくメンテナンスしやすいソフトウェアを作るために重要なことの一つは構造をシンプルに保つことです。 iOSアプリのビューは壊れやすいソフトウェアの代表ですが、できるだけシンプルに作ることで変化に強い、堅牢で壊れにくいソフトウェアにできます。 動的な要素が少ないということは、ビューがシンプルであるということの指標の1つと言えます。 この記事では下記に示すような、スクロールに合わせて伸び縮みするヘッダーを、動的な要素を無くし、Auto Layoutの静的な制約のみで実現する方法を解説します。 動的な要素とは、実行時におけるビューおよび制約の追加・削除、Frameや制約を更新することと、機種やスクリーンサイズ、標準UIコンポーネン

    Auto Layoutの静的な制約で実現する伸び縮みするヘッダービュー - 24/7 twenty-four seven
    chiqashi
    chiqashi 2018/11/05
  • NSArrayやNSDictionaryからNSNullを効率よく取り除く - 24/7 twenty-four seven

    iOSアプリケーションでWeb APIから返ってきたJSONを処理するのにNSNullの扱いに困っていて、事前にNSNullを取り除いてしまうのが事故を防ぐための確実な方法なのですが、再帰的にすべての要素を検査する以外になにかいい方法がないかと思って考えていたらちょっとおもしろい方法を思いついたので書いてみました。 kishikawakatsumi/CollectionUtils · GitHub ↑ に含まれるCUCompactArrayとCUCompactDictionaryです。 NSArrayとNSDictionaryのサブクラスとして実装されていて、次のようにして生成します。 (普通にalloc/initを使って生成することも可能です) NSArray *array = @[@"0", @"1", [NSNull null], @"2", [NSNull null], @"3"]

    NSArrayやNSDictionaryからNSNullを効率よく取り除く - 24/7 twenty-four seven
    chiqashi
    chiqashi 2014/04/10
    良さそうだ
  • ダウンロードした画像をキャッシュするクラスの設計と実装について - 24/7 twenty-four seven

    iOS組み込みのキャッシュモジュールNSCacheについて発表しました - ninjinkun's diary @k_katsumi キャッシュを分ける方のはわかりやすくて良いですね。後から読む人の参考になりそうなので、URL と URL の発言、ブログに引用させていただいても良いでしょうか。 2012-03-26 16:42:44 via web to @k_katsumi @ninjinkun はい。ぜひぜひー。せっかくなので便乗して僕がいつも使ってる画像キャッシュのコードを共有したりしてみます。 2012-03-26 16:45:05 via YoruFukurou to @ninjinkun @k_katsumi お、それは楽しみです!この手のものはみんな独自に作ってる感じだと思うので、参考にさせていただきたいですー。 2012-03-26 16:48:23 via web to

    chiqashi
    chiqashi 2014/02/10
  • UINavigationBar に複数の UIBarButtonItem を配置するには - 24/7 twenty-four seven

    UINavigationBar は基的に左右 (leftBarButtnItem, rightarButtonItem) に一つずつしかボタンを配置することができません。 しかし、ちょっと工夫をするとその制限を突破することができます。 (まあ物理的なスペースの関係でせいぜい2つか3つがやっとなのですけどね) 方法その1. UIToolbar を UIBarButtonItem として配置し、その中に UIBarButtonItem を並べる もっとも見た目がキレイに仕上がる方法です。 UINavigationBar の leftBarButtnItem と rightarButtonItemUIBarButtonItem のインスタンスをそれぞれ1つずつしか代入できませんが、UIToolbar を UIBarButtonItem として作成することで、その UIToolbar に複

    UINavigationBar に複数の UIBarButtonItem を配置するには - 24/7 twenty-four seven
  • UIWebView を使ってリソースバンドル内の HTML ファイルで、外部 JavaScript や CSS を読み込む - 24/7 twenty-four seven

    UIWebView を使用して、ローカルに存在する HTML ファイルを表示することができます。 そのとき、凝った表示を行う場合、外部 CSSJavaScript を使用したい場合があると思います。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>Google Maps JavaScri

  • UIButton の隠し API - 24/7 twenty-four seven

    UIButton も buttonWithType: メソッドの引数に 100 以上の値を直接指定すると、非公開のボタンタイプを使用することができます。 100 〜 102: ナビゲーションバーのボタン (UINavigationButton) 100, 101, 102 を指定すると、ナビゲーションバーで使われているボタンスタイルになります。 Back ボタンの形を自分で作るのは大変なので、素材として活用すると便利かもしれません。 UIButton *button; button = [UIButton buttonWithType:100]; button.frame = CGRectMake(10.0f, 10.0f, button.frame.size.width, button.frame.size.height); [button setTitle:[NSString stri

    UIButton の隠し API - 24/7 twenty-four seven
  • iPhone シミュレータでボタンの2つ同時押しや、2本指スクロールをテストするには - 24/7 twenty-four seven

    iPhone シミュレータでオプション (option) キーを押しながらマウスを操作すると、2指でのピンチイン、ピンチアウトのシミュレートができます。 さらに、オプション (option) + シフト (shift) を押すと、カーソルをその状態で固定したまま、平行に移動することができます。 これを利用すると、2指のスクロールなどのテストがシミュレータで実行できます。 (2指のスクロールは Safari のテキストエリア (Textarea) のスクロールなどで使用されています) またこの平行移動を上手に利用すると、同時タップの動作をシミュレータでテストすることが可能です。 まず、オプションキーを使用したピンチイン、アウトの動きで2点間の距離と角度を調整します。 2点の位置関係がちょうどいい感じになったら、すかさずシフトを押して固定します。 その状態でテスト対象のボタンなどに合うよ

    iPhone シミュレータでボタンの2つ同時押しや、2本指スクロールをテストするには - 24/7 twenty-four seven
  • 大辞林.app のような UI のサンプル「FlipCardNavigationView」を公開しました。 - 24/7 twenty-four seven

    kishikawakatsumi/FlipCardNavigationView · GitHub 西東京 iPhoneDev 勉強会にて、「PhotoFlipCardView」について、「画像の代わりに普通のビューを使うことはできないか」という指摘がありましたので、作ってみました。 このような画面が作れます。 やはり使い方はほぼ、UITableViewと同様です。 thumbnailView = [[FlipCardView alloc] initWithFrame:contentView.frame]; thumbnailView.delegate = self; thumbnailView.dataSource = self; [contentView addSubview:thumbnailView]; [thumbnailView release]; 実装すべきデリゲートメソッドは

    大辞林.app のような UI のサンプル「FlipCardNavigationView」を公開しました。 - 24/7 twenty-four seven
  • iPhoneで1024ピクセル以上の巨大な画像を表示するビュー - 24/7 twenty-four seven

    http://kuon.goyman.com/2009/01/22/iphone-large-image-viewer/ UIImageおよびUIImageViewは、1024x1024を超える大きさの画像を取り扱えません。 このGYImageViewは、スクリーンに表示される部分だけ高解像度で表示するという方法で、巨大な画像でもメモリを節約しつつ表示できるように作られています。 CGImageRefでオリジナル画像を保持しつつ、一画面に収まる大きさだけ高解像度の画像をUIImageViewとUIScrollViewを組み合わせて表示します。 スクロールしたぶんだけ徐々に表示される「マップ」アプリのような感じになります。 UIScrollViewを使っているので、ピンチイン、ピンチアウトでズームもできます。 Xcodeのプロジェクトの形で、そのまま動くコードがアップロードされているので、簡

    iPhoneで1024ピクセル以上の巨大な画像を表示するビュー - 24/7 twenty-four seven
  • 1