サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
qiita.com/takabosoft
はじめに Objective-C時代から絵文字の判定方法には 絵文字の文字コードを全部メモリーに持っておいて照合する という泥臭い方法を採っていたのですが、iOSのバージョンアップに伴う絵文字の追加に追従するのが面倒くさいので、もう少しスマートに判定できないか考えてみました。 2016/12/16 Xcode8.2 + iOS 10.2 頂いたコメント等を元に再編 考えたもの 仕組みは簡単、CoreTextを使ってAppleColorEmojiフォントに対し、文字コードを渡し、グリフ値(フォントの文字のインデックス値)へ変換できたら絵文字とみなす、というものです。 ただ、AppleColorEmojiフォントは何故か0,1,2,3...と言った文字のグリフも持っているため、その辺りだけ例外的に除外してあげる必要があります。 (スクショはmacのフォントですが) また、String.Char
どうもこんにちは。 いつまで経ってもゲームが上達しないエンジョイナワバリ勢のTakaboSoftです。 スプラトゥーンで遊んでいると、セーブ時など(カスタマイズ画面からハイカラシティへ戻るときなど)に画面左下にインジケーターが表示されるのですが、「iOSだったらどうやって実装するんだろう?」とふと疑問に思ったのでちょっとチャレンジしてみました。 ※実験してみただけで、使う予定はありません。 ほとんど実物を見ないで作り始めたせいで、答え合わせしたらあんまり似てませんでした。 実物は同じ場所から定期的にインクが飛び出すようなものでした(今回はランダムで実装)。 縁付近が黒くなっているのも謎です。 製作過程 たぶん最大の難関は丸同士の距離が近いときに液体の表面張力のようなくっつき方をする所だと思います。 たとえばこんなもの↓です(こちらは3Dですが)。 (画像の著作権者:T-tusさん、ライセン
SceneKitを使ってジオメトリを自作しようと思ったら、なにかと時間が掛かったので、少ないであろう後発隊のためにメモを残しておきます。 Xcode 7.3.1 + Swift 2.2 計測データなど外部のデータを3D表示したい場合など。 平面や球体、立方体、円柱、トーラスといった基本的な図形は既存クラスを使えばすぐに構築できますが、それ以外は自分でジオメトリを作らないといけません。 そのレシピをまとめます。 SceneKit内での考え方ですが、まずは頂点に関する以下の情報をジオメトリの【ソース(source)】として扱います。 頂点座標の配列 各頂点における法線ベクトルの配列(オプション) 各頂点におけるテクスチャ座標の配列(オプション) (他にも数種類あるようですがよく知らないので省略) また、頂点を繋いだ以下のような情報はジオメトリの【要素(element)】として扱います。 ポリゴ
localizedStandardCompareを使えば簡単に実現できるもよう。 ファイル一覧を表示する画面などで、普通に文字列比較でソートしただけでは、数字部分が1->10->2というような不自然な並びになりますが、それを自然な並びにすることができます。 import UIKit let orgFilenames = ["aaa1", "aaa2", "aaa10", "aaa20"] println("元の配列", orgFilenames) let sortedFilenames1 = orgFilenames.sorted(<) println("通常のソート", sortedFilenames1) let sortedFilenames2 = orgFilenames.sorted { $0.localizedStandardCompare($1) == NSComparison
func attributesOfItemAtPath(path: String, error: NSErrorPointer) -> [NSObject : AnyObject]? というように、戻り値の型が[NSObject: AnyObject]?になっているのですが、この辞書型から更新日付などを"お手軽に"取り出す方法が当初解りませんでした。 Objective-Cでは、NSDirectory型で結果が得られ、カテゴリで各情報が取り出しやすいようになっていましたが、 - (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0); @interface NSDictionary (NSFileAttributes) - (unsigne
Xcode 6.3.2 で確認。 Archive後にSubmit to App Storeで送信しようとしたら、アップロード中にクラッシュしてアップロードが完了しない。 OSを再起動しても変わらなくて困った。 回避方法 オーガナイザー以外のプロジェクトウィンドウを全て閉じておく。 その状態でなら送信してもクラッシュしない事を確認。 参考: Xcode crashes on submitting Archive (stackoverflow)
ホーム画面のアプリを削除する時に出てくるようなアラートを自前アプリでも以下のように実装していたのですが... let alert = UIAlertController(title: "タイトル", message: "メッセージ", preferredStyle: .Alert) alert.addAction(UIAlertAction(title: "削除", style: .Default, handler: nil)) alert.addAction(UIAlertAction(title: "キャンセル", style: .Cancel, handler: nil)) presentViewController(alert, animated: true, completion: nil) iOS8.3だとスタイルをUIAlertActionStyle.Cancelにした方が勝
はじめに iOS7の頃にiOS7の曇りガラス効果について知っている事まとめなどという記事を書いた手前、iOS8で公式に実装された磨りガラス機能(UIVisualEffectView)についても何か書くべきだろうと思いまして、いろいろと挙動を調べてみる事にしました。 なお、UIVisualEffectViewの基本的な使い方に関しては、他の記事などを参考にしてください。 4行でBlurView(刷りガラス風)Xcode6&iOS8(SnowHideJPさん) [iOS 8] UIVisualEffectViewを使ってすりガラス効果を実現する(クラスメソッドさん) 通常の表示 ブラースタイルが3種類定義されていまして、この3種類の中から選ぶようなのですが、それぞれの結果が以下の通りです。 (各ブラーの背景が違うので比較しづらくてすみません、理由は後述。) ただ、この3種がなぜ選出されたかはよ
はじめに iOS8でUIAlertViewが非推奨となり、UIAlertControllerへ置き換える作業を行っていたのですが、簡単にホイホイと置き換えられない事が判ってきましたので、その辺を備忘録的に書き留めておきたいと思います。 Xcode 6.0.1 + iOS8 iOS7以前の互換性は考慮していません。 UIAlertControllerの基本的な使い方は他の方の記事を参考にしてください。 表示元のUIViewControllerのインスタンスが必要になった UIAlertViewを使って以下のような感じのお手軽アラート関数を作って、単純なアラートを表示させていた方もいらっしゃるかと思います。 // 警告を表示します。OKボタンタップで閉じます。 void Warning(NSString *message) { [[[UIAlertView alloc] initWithTit
過去に3回ぐらいSingletonパターンの記事を見かけた事がありますが、Singletonパターンと言い張るためには「インスタンスが1つしか生成されない事を保証する」という約束ごとがあります。 Beta3まではこれが言語仕様的に困難であり、過去に紹介されてきたものは 「なんちゃってSingletonパターン」だったわけなのですが、Xcode6 Beta4でアクセスコントロールが可能になり、ついに1インスタンスを保証する事ができるようになりました。 class Singleton { private init() { // 1.イニシャライザをprivateに } class var instance: Singleton { // 2.インスタンスを取得するためのプロパティなり関数なりを用意し、共有インスタンスを返す struct Instance { static let i = Si
公式の英文資料を読んでもいまいち理解できなかった(英語が読めなかった)のでいろいろ試してみる事にしました。 Xcode6 beta5 + Playground 更新: 2015/03/06, Xcode6.3 beta3, Playground 基本的な使い方 ストアド・プロパティにwillSetとdidSetを仕掛ける事で、プロパティの変更前/後で何か処理を書く事ができます。 (※グローバル変数やローカル変数にも仕掛ける事ができます。) class Person { var age: Int = 0 { willSet { println("age willSet:\(age) -> \(newValue)") } didSet { println("age didSet :\(oldValue) -> \(age)") } } } let p = Person() p.age = 20
SwiftでもObjective-Cと同様に、普通にdispatch_async関数などが用意されており、GCDが利用できるようなのですが、 「大体バックグランドスレッドとメインスレッドを非同期で呼ぶぐらいしかやらないっしょ??」 ...という事で、ちょっとした関数を書いてみました。 用意するもの func dispatch_async_main(block: () -> ()) { dispatch_async(dispatch_get_main_queue(), block) } func dispatch_async_global(block: () -> ()) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block) } func onTest(sender: An
Swiftのautoreleasepoolは引数として関数を受け取るもので、Objective-Cと似たような構文で記述することができます。 しかしこれには罠があり、今までObjective-Cで書いていた時と同じような感覚で使ってしまうと実行結果が異なる場合があります。 以下、再現を目的としたサンプルコードです。 @implementation Hoge { int _counter; } - (void)test { _counter = 0; for (int i = 0; i < 10; i++) { @autoreleasepool { if (i == 5) { return; } _counter++; } } } - (void)start { [self test]; NSLog(@"%d", _counter); // 5 } class Hoge { var _cou
はじめに iPhone5sはA7チップが採用され、世界初の64ビットスマートフォンとして話題になりました。その話を聞いて興奮された方、そうでない方、多々いらっしゃると思いますが、私は後者です(^_^; 64ビット端末が意味する事とは!?どんなお付き合いをすればいいのか!?などなどをアプリ開発者目線でざっくばらん(独断と偏見に満ちています)にまとめてみました。 なんでこのタイミングで64ビット化したの? 64ビット化と聞いてアプリ開発者が一番想像し易いメリットはおそらく「使用できるメモリ量の上限が4GB(2GB)を超えられる」という点だと思いますが、現状まだそこまでメモリを搭載していませんし、今後発売される端末(iPhoneに限らず)にきっと大量のメモリを搭載してくるから、先攻して開発できるようにしたのかな?などと勝手に想像しています。 64ビット化の理由について他にも考察されている方がいら
UILabelの角を丸くするためにcornerRadiusを設定していたのですが、SDK7.1を使ってコンパイルしてiOS7.1の環境で動作させると挙動が変わるようです。 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(15, 45, 130, 30)]; label.backgroundColor = [UIColor colorWithWhite:0 alpha:0.8]; label.textColor = [UIColor whiteColor]; label.textAlignment = NSTextAlignmentCenter; label.text = @"Takabo Soft"; label.layer.cornerRadius = 15; // ←角丸 [self.view addSubview:
2014/10/07更に追記 iOS8でブラービューが標準機能として搭載されました。 別記事に投稿しましたのでそちらをご覧ください。 http://qiita.com/takabosoft/items/84e2039c19685d1c028b 2014/03/28追記 Twitterにて、@takatronix様より情報を頂きました。 このページの「自前BlurViewの作り方」でご紹介しているUIToolBarを使ったBlurViewを実装しますと、リジェクトになる可能性があります。 ご利用は自己責任でお願いいたします。 なお、Appleが公式で静止画にブラーを掛けるコードを提供していますので、動的ではなく静的なもので宜しければこちらを使っていただく方が確実です。 https://developer.apple.com/downloads/index.action UIImageEffe
先日yimajoさんがQiitaへ投稿された記事「Xcode5から追加されたAsset Catalog最大のメリット」の中で Asset Catalog使える環境なのに使わないのは老害 とおっしゃっていたのを見て、大変ショックを受けた私(笑)はムチを打ってAsset Catalogの挙動を調べてみる事にしたのでした(もしかして釣られた!?)。 また、すでに「Asset Catalogはアプリのアイコンや起動画面で使うと管理が楽になる」というのは国内のブログなどを見ていても明白だと思いますので、今回は通常の画像パーツを取り扱う上で何をするとどうなるかを適当に試してみる事にしました。 Xcode 5.0.1 使用 (2013/11/15現在) 非RetinaとRetinaで同名ファイルを突っ込むとどうなるの? New Image Setでaaaという名前のイメージセットを作り、1xに000.p
UIViewの派生クラスを作成して単純な図形や表などを描画する事があるかと思いますが、何の偏見も無く(3,3)-(10,3)の水平線を1ポイントで描こうと思ったら、最初はこんな感じのコードを書くのではないでしょうか。 - (void)drawRect:(CGRect)rect { CGContextRef c = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(c, 1); [[UIColor redColor] setStroke]; CGContextMoveToPoint(c, 3, 3); CGContextAddLineToPoint(c, 10, 3); CGContextStrokePath(c); } 非RetinaとRetinaで実行した結果がこちらです。 1ポイント(非Retina1ドット、Retina2ドット)
概要 ここ1年ぐらいiPad向けのアプリを作っていたのですが、その際にXcodeを使ってObjective-Cのソースをそれなりに奇麗に見えるように自分なりにあれこれ試行錯誤してきました。その結果を整理して晒してみたいと思います。 なお、Appleが「Cocoa向けコーディングガイドライン」という物を出していますので、基本的な部分はそちらが参考になると思います。 https://developer.apple.com/jp/devcenter/ios/library/japanese.html (GoogleもObjective-Cのスタイルガイドを出していますが私は「なるほどそういう事もあるのかー」程度にしか読んでいません。) コーディングルールについては古の時代から様々な派閥があって議論になりがちですが、最終的には自分が好きなスタイルに落ち着くかと思います。 そのヒントにでもなれば幸い
このページを最初にブックマークしてみませんか?
『@takabosoftのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く