Objective-Cで特定のクラス(またはサブクラス)であるかどうか判定する場合には、[view isKindOfClass:[UIImageView class]]
を使っていた。
swiftでは以下のように書くことができる。
view.isKindOfClass(UIImageView)
Objective-Cで特定のクラス(またはサブクラス)であるかどうか判定する場合には、[view isKindOfClass:[UIImageView class]]
を使っていた。
swiftでは以下のように書くことができる。
view.isKindOfClass(UIImageView)
特定の範囲の乱数を求める際には、Objective-Cと同じようにarc4random関数
を使うことができます。
//0から9までの値を取得する let random = arc4random() % 10
上記のコードではarc4random関数
で得た乱数の余剰を求めているため、arc4random関数
では生成される乱数にやや偏りが発生してしまいます。
事前に0から9までの値が欲しいということが分かっているのであれば、arc4random_uniform関数
を使うと良いでしょう。
//0から9までの値を取得する let random = arc4random_uniform(10)
例えば、String型の配列からランダムに1つ取り出す場合には以下のように書くことができます。
var titles: [String] = [ "ほげ", "ぽよ", "ぴよ", "ぷよ" ] let index = (Int)(arc4random_uniform(4)) println("\(titles[index])")
Objective-Cで乱数を生成する場合は以下の記事を御覧ください。
過去にObjective-CでNSCalendarクラスとNSDateComponentsクラスを使って、以下のような現在の年度をNSNumber型で取得するメソッドがありました。このメソッドを
- (NSNumber*)yearNumber { NSCalendar* gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; NSDateComponents* comp = [gregorian components:NSYearCalendarUnit fromDate:[NSDate date]]; return [NSNumber numberWithInteger:comp.year]; }
iOS 8 SDKを使ってビルドをすると、下記のようなワーニングが表示されるようになります。
example.m:164:74: 'NSGregorianCalendar' is deprecated: first deprecated in iOS 8.0 - Use NSCalendarIdentifierGregorian instead
example.m:163:49: 'NSYearCalendarUnit' is deprecated: first deprecated in iOS 8.0 - Use NSCalendarUnitYear instead
iOS 8.0以降、NSGregorianCalendar
とNSYearCalendarUnit
の利用がdeprecated(非推奨)となりました。
iOS 7以前 | iOS 8以降 |
---|---|
NSGregorianCalendar | NSCalendarIdentifierGregorian |
NSYearCalendarUnit | NSCalendarUnitYear |
以下のように書き換えることが可能です。
- (NSNumber*)yearNumber { NSCalendar* gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian] autorelease]; NSDateComponents* comp = [gregorian components:NSCalendarUnitYear fromDate:[NSDate date]]; return [NSNumber numberWithInteger:comp.year]; }
他にも名前が変わっている定義がいくつかあります。
iOS 7以前 | iOS 8以降 |
---|---|
NSGregorianCalendar | NSCalendarIdentifierGregorian |
NSYearCalendarUnit | NSCalendarUnitYear |
NSMonthCalendarUnit | NSCalendarUnitMonth |
NSDayCalendarUnit | NSCalendarUnitDay |
NSHourCalendarUnit | NSCalendarUnitHour |
NSMinuteCalendarUnit | NSCalendarUnitMinute |
NSWeekdayCalendarUnit | NSCalendarUnitWeekday |
NSString型の文字列を画像に変換します。「サイズを指定して空のUIImageオブジェクトを生成する - iOSアプリ開発の逆引き辞典」をベースとしています。
- (UIImage *)imageWithString:(NSString *)text { // 描画するサイズ CGSize size = CGSizeMake(34, 18); // ビットマップ形式のグラフィックスコンテキストの生成 // 第2引数のopaqueを`NO`にすることで背景が透明になる UIGraphicsBeginImageContextWithOptions(size, NO, 0); // 描画する文字列の情報を指定する //-------------------------------------- // 文字描画時に反映される影の指定 NSShadow *shadow = [[NSShadow alloc] init]; shadow.shadowOffset = CGSizeMake(0.f, -0.5f); shadow.shadowColor = [UIColor darkGrayColor]; shadow.shadowBlurRadius = 0.f; // 文字描画に使用するフォントの指定 UIFont *font = [UIFont boldSystemFontOfSize:14.0f]; // パラグラフ関連の情報の指定 NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; style.alignment = NSTextAlignmentCenter; style.lineBreakMode = NSLineBreakByClipping; NSDictionary *attributes = @{ NSFontAttributeName: font, NSParagraphStyleAttributeName: style, NSShadowAttributeName: shadow, NSForegroundColorAttributeName: [UIColor whiteColor], NSBackgroundColorAttributeName: [UIColor clearColor] }; // 文字列を描画する [text drawInRect:CGRectMake(0, 0, size.width, size.height) withAttributes:attributes]; // 現在のグラフィックスコンテキストの画像を取得する UIImage *image = nil; image = UIGraphicsGetImageFromCurrentImageContext(); // 現在のグラフィックスコンテキストへの編集を終了 // (スタックの先頭から削除する) UIGraphicsEndImageContext(); return image; }
使い方。
NSString *text = @"[ほ] "; UIImage *image = [self imageWithString:text];