読者です 読者をやめる 読者になる 読者になる

49hack

見習いエンジニアが魔法使いになるまで

UILabelで文字に枠をつける

文字に枠を付けてくっきりさせます。 UILabelのカスタムクラスをつくってdrawTextInRectをオーバーライドします。 - (void)drawTextInRect:(CGRect)rect { CGSize shadowOffset = self.shadowOffset; UIColor *textColor = self.textColor; CGContextRef c =…

レスポンスにリレーションがない場合にCoreDataからも削除する

たとえば、次のようにcommunityとtopicにリレーションがあり、 RKEntityMapping *communityMapping = [RKEntityMapping mappingForEntityForName:@"HogeCommunity" inManagedObjectStore:managedObjectStore]; [communityMapping addAttributeMappingsFromDi…

UICollectionViewCellでAutoLayoutが効かない

iOS8SDKの既知の不具合として認識されているようです。 iOS8SDKをiOS7上で動かしたときに発現します。 CellのcontentViewのサイズが変更されていないのが原因なので、UICellectionViewCellのサブクラスに以下のコードを追加して対応します。 - (void)setBoun…

文字列をblowfish暗号化する

文字列を暗号化する方法のメモ。今回は可逆暗号化が目的なのでblowfishを使います。 Security.frameworkが必要なので、Build Phasesで追加してください。 #import <CommonCrypto/CommonCrypto.h> // 文字列をblowfish暗号化する + (NSString *)encodeBlowfish:(NSString *)str { NSData *k</commoncrypto/commoncrypto.h>…

iPhoneのWebViewでカスタムフォントを使う

アプリ全体のデザインを崩さないためにも、アプリ内のWebViewでも積極的にカスタムフォントを使いましょう。 使用したいカスタムフォントがアプリ内に入っている場合とそうでない場合で方法が若干異なります。 (カスタムフォントがmplus-1c-medium.ttfの場…

iOS7でUIViewアニメーションが機能しない

iOSの違いでUIViewアニメーションの挙動が違うので注意が必要です。 とりわけ「iOS6では動くのにiOS7では動かない」といった状況に陥ります。 iOS7ではUIViewアニメーションに関して変更があり、viewがまだ表示されていない状態(viewDidLoad, viewWillAppea…

脱獄端末のチェックをする

結局イタチごっこなのですが、、、脱獄対策のメソッドを書きました。 BreakThroughで脱獄回避のメソッドをすり抜けられちゃうので、BreakThroughそのもののチェックをしてみたり。 /* * 脱獄端末のチェック */ +(BOOL)isJailBreak { #ifdef DEBUG // デバッ…

ViewControllerがpresentされたのかpushされたのか判定する

ViewControllerがモーダルされたのかプッシュされたのか判定したい場合がしばしばあります。(例えば、モーダルのときは「閉じる」ボタン、プッシュのときは「戻る」ボタンに変更したいときとか。) if(self.presentingViewController != nil) { // モーダル…

アプリがFacebookに認証済みかどうか判定する

Accounts.frameworkが必要です。 まあ、認証終わったあとにNSUserDefaultsにユーザIDなんかを保持しておくだけでもいい気がしますが、正式(?)な方法があるので一応メモしておきます。 ACAccountStore *accountStore = [[ACAccountStore alloc] init]; ACAcco…

UIAlertViewを表示しているかどうかをチェックする

ユーザとして、ダイアログが複数回出てくるのはかなりストレスに感じます。 UIAlertViewの表示チェックを行うことで、それを回避します。 -(void)showDialog { // ダイアログを表示中かチェックする for (UIWindow* window in [UIApplication sharedApplicat…

非ARCのプロジェクトにARC対応ライブラリを対応させる方法

非ARCのプロジェクトにSBJsonなどのARC対応ライブラリを導入してビルドすると以下のようなエラーがでます。 This source file must be compiled with ARC enabled! Build Phases -> Compile Sources でCompiler Flagsを設定します。 エラーが出ている.mファ…

FacebookSDKのエラー「Code=2 "The operation couldn’t be completed.」を解消する

XcodeでFacebookアプリ開発時に、特定の端末でFacebookログインでエラーが発生しました。 Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. (com.facebook.sdk error 2.)" UserInfo=0x17e904d0 { com.facebook.sdk:ErrorLoginFailedRe…

Game CenterのLeaderboardで小数(float型)のスコアを送信する

Game CenterのLeaderboardで小数を使ったスコア(例:12.3m, 123.45ptなど)を使用している場合、スコアの送信方法に少し戸惑ったのでメモします。 まず、iTunes ConnectにてLeaderboardの設定を確認します。 「Score Format Type」が Fixed Point - To 1 De…

Game Centerの「The requested operation has been cancelled or disabled by the user.」を解決する

Game Centerの挙動チェックをしていると突然、 「The requested operation has been cancelled or disabled by the user.」 のエラーが出てGame Center画面が立ち上がらなくなりました。 これはGame Center画面を3-5回キャンセルすると起こる事象らしく、サ…

UITableViewCell上のUIButton(Custom)が反応しない

XIBで独自クラスのセルを作成し、そのセル上にUIButtonを設置している場合、iOS7ではタップに反応しません。 対処法としてはセルに対して以下のコードを追加すればOKです。 [customCell.contentView setUserInteractionEnabled: NO]; XIBでセルを作っている…

iAdとAdMobを切り替えるAdMobメディエーションを実装する

AdMobメディエーションを使うことで複数のアドネットワークを切り替えることができます。 AdMobの設定は各自で行なってください。 今回は一般的なiAdとAdMobの2種類の広告を扱います。 なお、ARC対応の場合はOther Linker Flagsに-ObjCを追加する必要があり…

Interface Builderで16進の色コード(Hex Color)を使えるようにするプラグインを導入する

Xcodeにて、Interface Builderでも色コードを指定できるとものすごく効率が上がります。 下図のような感じです。 そのための便利なプラグイン「Hex Color Picker」があったので早速導入します。 こちらからプラグインをダウンロードします。 Finder -> 移動…

NSURLRequestでSSL証明書を無視する

NSURLRequestを拡張することでSSLの証明書を無視します。 #import <Foundation/Foundation.h> @interface NSURLRequest (IgnoreSSL) + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host; @end #import "NSURLRequest+IgnoreSSL.h" @implementation NSURLRequest (IgnoreSSL) +</foundation/foundation.h>…

UITextViewに文字数制限/文字数カウント機能を実装する

テキストビューに以下の機能を実装します。 所定文字数までしか入力させない文字数制限機能 現在テキストビューに入力されている文字数のカウント textlengthLabelに現在の文字数を表示させます。 #define MAX_LENGTH 200 // 文字数制限を200に設定 - (BOOL)…

NSTimerをscrollイベント中にも機能させる

NSTimerをscrollイベント中にも動かしたい場合、 [NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(hoge) userInfo:nil repeats:YES]; 上記のままだとscrollイベント時に止まってしまうので、以下のようにすると良いです。 NSTimer *time…

NSJSONSerializationでJSONをパースする

iOS5から追加されたNSJSONSerializationを使ってみました。 今回はDribbbleのAPIで試してみます。 // Dribbbleから人気ショット一覧を取得するURL NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://api.dribbble.com/sh…

Tagを用いて複数のUIAlertViewを処理する

複数のUIAlertViewを使う場合、buttonIndexのみではアクション処理がバッティングしてしまうので、Tagを使って場合分けをします。 //アラート画面のタグを宣言 static const NSInteger firstAlertTag = 1; static const NSInteger secondAlertTag = 2; //ア…

「InfoPlist.stringsなんてないよ!」のエラーを解消する

gitなどのバージョン管理システムを使わずにプロジェクトをそのままコピペした場合、 Xcodeで実行すると次のようなエラーが出ました。 The file InfoPlist.strings couldn’t be opened because there is no such file. プロジェクト名.xcodeprojディレクトリ…