android & ios

static cellとcontainerを利用して、controllerを分割する実験

概要 いくつかのcontainer viewの表示と非表示の切り替えを行う。 縦に切り替えを行うためにtable view controllerのcellの高さを調節する。 https://github.com/reikubonaga/containerSample1 container view controllerの表示 static table Cell上にcontainerを設置。 containerにviewControllerをセットして表示する。 cellかどうかの判定は、cellの比較によって判定し、heightは自分で定義する。 static CGFloat const kViewControllerCellHeight = 300; @property (nonatomic, we...

AVAudioPlayerで次の曲を再生する方法

背景 AVAudioPlayerDelegateのaudioPlayerDidFinishPlayingメソッドでは、音楽の再生が終わったことを検知することができるが、次の曲を再生する方法がわからなかった。 解決方法 以下のようにすることで実現できた。 1.現在再生中のインデックスを保持する。 2.MPMediaItemCollectionから次の曲を取り出して設定する。 3.最後の曲を再生した場合は曲を停止する。 Player.h @interface Player : UIViewController <AVAudioPlayerDelegate> @property (nonatomic) AVAudioP...

2つ目のiOSアプリケーションをswiftに書き換えてみた

前回は、「初めてのiOSアプリケーション」をswiftに書き換えてみましたが 今回は「2つ目のiOSアプリケーション」をswiftに書き変えてみました。 https://github.com/bnrh29/BirdWatchSwift AutoLayout周りにはまってしまい下記の記事を参考にさせてもらいました。 2つ目のIOSアプリケーションのAutoLayout周りXCode5.1に読みかえ

ViewControllerを閉じる

[self dismissViewControllerAnimated:true completion:^() { NSLog(@"finish closing"); }]; 1つ目のパラメータでアニメーションしながら消えるかどうかを指定します。 表示の際に使用したアニメーションに応じて閉じる際のアニメーションも変わるようです。 2つ目のパラメータは閉じ終わった後の動作をblocksで指定します。

UISegmentedControlをテキストだけにカスタマイズ

初投稿です。メモ書きとしてちょくちょく残していこうと思います。 ボタンを2個並べてトグルで切り替えるためにUISegmentedControlをカスタマイズして使用しました。 直感的に修正内容がわかりづらかったので誰かのお役に立てればと。 カスタマイズ内容 ボーダーの消去 selected, highlight時の背景色を透明化 ラベルのフォントカラーの変更 Storyboard上ではこんなデザインが こうなります NSDictionary *attributes = @{UITextAttributeFont: [UIFont systemFontOfSize:15], UIT...

Objective Cでmixin

なぜmixinが必要なのか? ベースとなるViewControllerに共通の変数+メソッドを追加したかった UIViewController UITableViewController UICollectionViewController カテゴリ+AssociatedObjectでも出来なくはないけど、面倒。 実現方法 mixin定義をoptionalなprotocolとして定義し、それを実装するmixin用オブジェクトを定義する。 @protocol SampleMixinProtocol<NSObject> @optional @property BOOL aBool; @end @interface SampleMixin : NSObject<SampleMixinProtocol&...

オブジェクトのライフサイクル中一度だけ処理を実行する

プロセスの起動中に一度だけ処理を行う場合、dispatch_onceを使うと思いますが、オブジェクトがインスタンス化されてから開放されるまで一度だけ処理を実行したい場面がありました。 #import <objc/runtime.h> @interface NSObject (PerformOnce) // オブジェクトが生きている間一度だけ実行される - (void)performOnce:(void(^)())onceBlock; @end @implementation NSObject (PerformOnce) - (void)performOnce:(void (^)())onceBlock { if (![objc_getAssociatedObject(se...

特定の拡張子のファイルをリスト化

例えば、プロジェクトにリソースとしてJPEGファイルをいくつか入れたとして。 JPEGファイルをリスト化して配列でファイル名を返すメソッド。 -(NSArray *)getFileList:(NSString *)extension{ NSMutableArray *array = [[NSMutableArray alloc] init]; // ファイル一覧を取得 NSFileManager* fileManager = [[NSFileManager alloc] init]; NSString *path = [[NSBundle mainBundle] bundlePath]; for(NSString *content in [fileManager contentsOfDirectoryAtPat...

NSStringの最初の文字だけ大文字にするメソッド

備忘。 NSStringの最初の文字だけ大文字にする。 // 最初の文字だけ大文字にする -(NSString *)capitalizeFirstLetter:(NSString *)string{ NSString *capitalisedSentence = [string stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[string substringToIndex:1] capitalizedString]]; return capitalisedSentence; } こちらより抜粋しました。 http://stackoverflow.com/questions...

RubyMotionでナビゲーションバーや本文に日本語フォントを指定する方法

RubyMotionを使った環境で、ナビゲーションバーのフォントを一括でヒラギノ角ゴシックにする方法を紹介します。 環境 Mac OSX 10.9.4 RubyMotion 2.33 (2014年9月18日時点での最新版) 利用したサンプルアプリ QiitaのRubyMotionタグの付いた記事を読めるニュースリーダーアプリです。 RMQiita https://github.com/shigemk2/RMQiita 使うフォント iOSで利用できる日本語フォントは、ヒラギノ角ゴシックProNのW3とW6の2種類です。 PostScriptネームは次の通りで、MacOSXでも標準的に使...

xcodeで Apple LLVM error が出た時の対処

xcodeをアップデートしたりすると Apple LLVM error fatal error: file '/Applications/ ~~~~~~~~~ .pch' was built みたいなエラーで、cocoapodsでインストールしたやつらでコケてはまって対処忘れるのでメモ 対処法 rm ~/Library/Developer/Xcode/DerivedData/ModuleCache/* 以上

UIImagePickerで、取得した画像を別Viewで表示する。

UIImagePickerで画像を取得した後に、新しいViewで画像を表示させます。 以下、FirstViewControllerでUIImagePickerで画像を取得し、SecondViewControllerで画像を表示させます。 FirstViewController.h // // FirstViewController.h // #import <UIKit/UIKit.h> @interface FirstViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationControllerDelegate> @end UIImagePickerを使用するためのdelegate宣言として、UIImagePickerControlle...

SwiftでAlamofireを使ってみた。QiitaのSwiftに関する投稿をパースしてみたよ。

SwiftでAlamofireを使ってみた。 パースする内容はQiitaのSwiftに関する投稿。 gifアニメーション Github https://github.com/ytakzk/Swift-Alamofire-For-Qiita 使用したAPI Qiita APIを使用。(https://qiita.com/docs) 以下はDocumentより抜粋。 GET /api/v1/search [{"id": 1, "uuid": "1a43e55e7209c8f3c565", "user": {"name": "Hiroshige Umino", "url_name": "yaotti", "profile_image_url": "https://si0.twimg.com/profile_images/2309761038/1ijg13pfs0dg84sk2y...

Xcode 6 で新規作成したプロジェクトを iPhone 5 or 5s w/ iOS 7 上で実行すると上下に黒帯が入る

ある程度書いてから気づいたので泣きそうになった。 結論としては、iPhone 4s -> 5 のときのように、起動画面用のリソースの有無によりアプリの表示サイズを決定しているようだ。 Asset Catalog 等で、LaunchImage として@2xと[email protected]の画像(定義)を用意してあげれば、きちんとフルスクリーンでアプリが実行される。 同時に LaunchScreen も設定しておけば、iOS 8 ではそちらが使われる。 Asset Catalog を使う例 [Use Asset Catalog] -> [Migrate]

Safariを使った端末側でのTwitter OAuth認証方法

Twitter-OAuth-iPhoneを参考に、セキュリティコードのスクレイピングをしないものを作る。 OAuthConsumer を使う。 ARCへはXcodeで変換するか、上手くいかなければ手動で。 (※いちおう私がforkして変換したレポジトリはここにある) まず Twitterのデベロッパページでアプリを登録する。 以下のステップで見るようにコールバックURLとしてはiOSのカスタムURLスキームに割り当てるから本来設定は不要だが、Twitterのページにはhttp(s)しか指定できず、指定しないとなぜか以下のOAuth認証...

Frank-Cucumberをpryから叩いてみた

Frank-Cucumberを使ってiOSアプリへアクセスするまとめ。 Cucumber-driverを 使わずに pryやrspecから叩くことを狙います。 frank consoleも使わないようにします。 Frank-Cucumner 1.1.12 を対象にしています。 まとめ 以下で一通り叩けるようになります。 require 'frank-cucumber/cli' require 'frank-cucumber/rect' include Frank::Cucumber::FrankHelper Frank::Cucumber::FrankHelper.use_shelley_from_now_on アクセスしたいViewをShelly selectorで選択して FrankHelperにメ...

iOS7でUIViewController上のUITableViewが上手く表示されないとき

魔法の呪文 - (void)viewDidLoad { [super viewDidLoad]; if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { self.edgesForExtendedLayout = UIRectEdgeNone; self.extendedLayoutIncludesOpaqueBars = NO; self.automaticallyAdjustsScrollViewInsets = NO; } } これでViewがNavigationBarの下に突っ込まなくなる。 参考: http://stackoverflow.com/questions/18900428/ios-7-uitableview-shows-under-status-b...

iOS 8.0.2でフツーにSafariからフォトライブラリにアクセスできるようになった

バグ対応らしいけど iOS 8 Mobile Safari の変更点を予測してみました - latest log によると、そもそもiOS8のリリースのしばらく前にコードが削除されており、 文句言われたから元に戻したのかなぁ GPS情報は? 位置情報はiOS7時代までと同様でカットされてました。iOS 8.0でのフォトライブラリ対応のWebClip形式にしてもこれまでと同様にカットされてました。 関連投稿 iOS8のSafariでフォトライブラリの画像データにアクセスできた! - Qiita iOS8にしたらSafariでWebGLは動くよう...

iOSでtwitterのアカウント情報を取得する

How to get user info from twitter in ios 6? iOS 6 and the Social Framework: Twitter Requests twittermotion

iOSシミュレータをターゲットとしたビルド時に「has been modified since the precompiled header」が発生したときの対処方法

コンソールで以下のコマンドを実行し、配下にあるpcmファイルを削除 $ cd /Users/<User>/Library/Developer/Xcode/DerivedData/ModuleCache $ rm -rf * Xcodeで対象プロジェクトを開き、[command]-[alt]-[shift]-[k]を押下して、Cleanしたあと、再度ビルドすると問題なくビルドできる。