Hatena::ブログ(Diary)

k2ダイアリー

2012-01-15

iOS5でのUINavigationBarの背景画像処理


iOS5以前でUINavigationBarの背景に画像を使用する際には、いくつか方法がありました。

例えば以下の画像(navibar.png)を適用したい場合

[navibar.png]

f:id:k2_k_hei:20120115101439p:image

よく利用していたパターン2つを参考としてあげます。


【NavigationBarカテゴリでdrawRect】

 @implementation UINavigationBar (UINavigationBarCategory)
 - (void)drawRect:(CGRect)rect 
 {
     UIImage *image = [UIImage imageNamed:@"navibar.png"];
     [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
 }
 @end


【NavigationBarにinsertSubview】

    #import <QuartzCore/QuartzCore.h>
    ..
    ..
    UIImage *image = [UIImage imageNamed:@"navibar.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = self.navigationController.navigationBar.bounds;
    imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth
                                  | UIViewAutoresizingFlexibleHeight);
    imageView.layer.zPosition = -FLT_MAX;
    [self.navigationController.navigationBar insertSubview:imageView atIndex:0];


ですが、これらの方法はiOS5以降では使用できなくなっています。


iOS5だと変化なし

f:id:k2_k_hei:20120115103200p:image

iOS5以降のUINavigationBarには

- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics

メソッドが用意されており、Viewの構成が変わったようです。

なので、iOS5以降では上記のパターンは以下のように修正しておく必要があります。


【NavigationBarカテゴリでdrawRect】

UINavigationBar (UINavigationBarCategory) は残しつつ以下処理を追加

    // iOS 5用  メソッドの有無で確認
    if([self.navigationController.navigationBar
        respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] )
    {
        [self.navigationController.navigationBar setBackgroundImage:image
                                                      forBarMetrics:UIBarMetricsDefault];
    }


【NavigationBarにinsertSubview】

if文で振り分け

    #import <QuartzCore/QuartzCore.h>
    ..
    ..
    UIImage *image = [UIImage imageNamed:@"navibar.png"];
    // iOS 5用 メソッドの有無で確認
    if([self.navigationController.navigationBar
        respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] )
    {
        [self.navigationController.navigationBar setBackgroundImage:image
                                                      forBarMetrics:UIBarMetricsDefault];
    }
    // iOS 4.3以前
    else
    {
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        imageView.frame = self.navigationController.navigationBar.bounds;
        imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth
                                      | UIViewAutoresizingFlexibleHeight);
        imageView.layer.zPosition = -FLT_MAX;
        [self.navigationController.navigationBar insertSubview:imageView atIndex:0];
    }


うまく適用できました。

f:id:k2_k_hei:20120115103445p:image

では、今回はこの辺りで。




Shareしていただけると励みになりますので

良ければよろしくお願いします

山本彩 水着画像山本彩 水着画像 2013/12/17 16:52 ありがとうございます☆*:.。. o(≧▽≦)o .。.:*☆

役に立ちました(笑)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元