UIImageのリサイズが上手くできない
これまではUIImageのリサイズというと、以下のメソッドを使ってたと思います。
[UIImage stretchableImageWithLeftCapWidth: topCapHeight:]
で、これがiOS6からはDeprecated(非推奨)になってしまい、
次のメソッドを変わりに使いやがれとなりました。
[UIImage resizableImageWithCapInsets:]
既存のstretchableImageWithLeftCapWidthをこちらのメソッドに
変更したところ、何故か全然リサイズが働かない!という人が
居るかもしれません。ええ、私です。
だいたい次のような書き方をしていると陥るようです。
UIImage *stretchImage = [UIImage imageNamed:@"sample.png"]; stretchImage = [stretchImage resizableImageWithCapInsets:UIEdgeInsetsMake(5, 10, 5, 10) resizingMode:UIImageResizingModeStretch]; // !! なぜかのびない !! UIImageView *imageView = [[UIImageView alloc] initWithImage:stretchImage];
何故か読みやすいように2段に分けると、こいつは正常に動かなくなるようです。
stretchableImageWithLeftCapWidth: の頃は大丈夫だったのに……。
そのため、以下のように直すともしかすると意図した動作になるかもしれません。
UIImage *stretchImage = [[UIImage imageNamed:@"sample.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 10, 5, 10) resizingMode:UIImageResizingModeStretch]; // !! なぜかのびる !! UIImageView *imageView = [[UIImageView alloc] initWithImage:stretchImage];
たまにハマるので、またハマってGoogle検索したときに
このブログが出てくるようにメモとして残しておきます。
※2012/11/09 追記
iOS5では[UIImage resizableImageWithCapInsets: resizingMode:]が存在しないので、
[UIImage resizableImageWithCapInsets:]で書かないと実行時にエラーが発生しますのでご注意