iOSアプリ開発の逆引き辞典

iPhone/iPadで使えるアプリ開発のTipsをまとめてみました

サイズを指定して空のUIImageオブジェクトを生成する

本記事では、UIImageオブジェクトをプログラム(コード)だけで動的に生成する基本となる方法を紹介します。

- (UIImage *)imageWithSize:(CGSize)size
{
    UIImage *image = nil;
    
    // ビットマップ形式のグラフィックスコンテキストの生成
    UIGraphicsBeginImageContextWithOptions(size, 1.f, 0);
    
    // 現在のグラフィックスコンテキストの画像を取得する
    image = UIGraphicsGetImageFromCurrentImageContext();
    
    // 現在のグラフィックスコンテキストへの編集を終了
    // (スタックの先頭から削除する)
    UIGraphicsEndImageContext();
    
    return image;
}

上記で定義したUIImageオブジェクトを返すimageWithInRect:メソッドを実行します。

- (IBAction)tappedButton:(id)sender
{
    // ImageViewのサイズを取得する
    CGSize size = self.imageView.frame.size;

    // サイズを指定してUIImageオブジェクトを生成する
    UIImage *image = [self imageWithSize:size];
    
    // 生成したUIImageオブジェクトをImageViewに設定する
    self.imageView.image = image;
}

実行すると下図のようになります。

f:id:ch3cooh393:20140307181237p:plain

乱数(ランダムな値)を生成する

stdlib.hでは下記のように定義されています。

u_int32_t  arc4random(void);
void    arc4random_addrandom(unsigned char * /*dat*/, int /*datlen*/);
void    arc4random_buf(void * /*buf*/, size_t /*nbytes*/) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
void    arc4random_stir(void);
u_int32_t
     arc4random_uniform(u_int32_t /*upper_bound*/) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);

特定の範囲の乱数を求める際には、arc4random関数を使うことができます。

//0から9までの値を取得する
u_int32_t random = arc4random() % 10;

上記のコードではarc4random関数で得た乱数の余剰を求めているため、arc4random関数では生成される乱数にやや偏りが発生してしまいます。

事前に0から9までの値が欲しいということが分かっているのであれば、arc4random_uniform関数を使うと良いでしょう。

//0から9までの値を取得する
u_int32_t random = arc4random_uniform(10);

小数点の切り捨て、切り上げ、四捨五入

本記事では、数値の少数点の処理(丸め処理、整数化)をおこなう方法を紹介します。 math.hで定義されているCの関数を使用します。

切り捨て

math.hでは下記のように定義されています。

extern float floorf(float);
extern double floor(double);
extern long double floorl(long double);

以下のサンプルコードは、2.55の小数点部分を切り捨てして2にします。

double value = 2.55;
double result = floor(value);

// 出力: result => 2

切り上げ

math.hでは下記のように定義されています。

extern float ceilf(float);
extern double ceil(double);
extern long double ceill(long double);

以下のサンプルコードは、2.55を切り上げして3にします。

double value = 2.55;
double result = ceil(value);

// 出力: result => 3

四捨五入

math.hでは下記のように定義されています。

extern float roundf(float);
extern double round(double);
extern long double roundl(long double);

以下のサンプルコードは、2.55を四捨五入して3にします。

double value = 2.55;
double result = round(value);

// 出力: result => 3

カスタムURLスキームを使って通話アプリに電話番号を渡して連携起動する

通話アプリ(電話アプリ)に番号を渡して起動させたい場合、どのようにして連携起動をおこなうのかを紹介します。

UIApplicationクラスはアプリケーション全体を管理するクラスです。canOpenURL:メソッドで実際に開くことが可能なURLなのかどうか判定し、その上でopenURL:メソッドを使って通話アプリを起動しています。

NSString* urlstr = @"tel:1-408-555-5555";

NSURL* url = [NSURL URLWithString: urlstr];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url];
}