Xamarin.iOSのUIを作るうえであると便利な拡張メソッド
iOSのUIなので、本家Swiftの技術ブログなんかにはいくらでも情報があります。
が、C#の情報は比較的少ないです。
まあ、SwiftをC#に置き換えればいいだけなのですが、
本家iOSの開発やったことなくて、C#とXamarin.iOSを同時にやり始める人(私みたいな)なんかにはこの手のC#で書いた小技情報が貴重です。
※思いついたら追加していきます。
UIColorをUIImageに変換する
public static UIImage ToImage(this UIColor color) { var rect = new CGRect(0, 0, 1, 1); UIGraphics.BeginImageContextWithOptions(rect.Size, false, 0f); var context = UIGraphics.GetCurrentContext(); context.SetFillColor(color.CGColor); context.FillRect(rect); var image = UIGraphics.GetImageFromCurrentImageContext(); UIGraphics.EndImageContext(); return image; }
これを書いておくと何がうれしいかというと、UIButtonなんかの色を設定する時に便利になります。 UIButtonは、通常時や押された時の見た目をSetImageメソッドで指定できますが、メソッド名が示す通りUIImageしか登録できません。 「ちょっと色変えたいだけなのにUIImageが必要なの!!?」となります。 そういうときはこのメソッドを書いておけば、
button.SetImage(UIColor.Blue.ToImage(), UIControllState.Highlighted);
という感じに使えます。 UIGraphicsは、ちょっと見た目をこだわろうとすると使う機会が多いですね。
UIViewをUIImageに変換する。
public static UIImage ToImage(this UIView view) { UIGraphics.BeginImageContextWithOptions(view.Bounds.Size, false, 0f); view.Layer.RenderInContext(UIGraphics.GetCurrentContext()); var image = UIGraphics.GetImageFromCurrentImageContext(); UIGraphics.EndImageContext(); return image; }
これはボタンとかアイコンとかをUIViewのDrawで作って部品化したいときに使います。 iOSのコントロールをそのまま使えれば一番楽なのですが、そうはいかないことが多々あります。 そういったものはUIViewのDrawで頑張って作ったものを、そのままでは使い勝手が悪いのでUIImageに変換します。
UIImageをリサイズする。
public static UIImage Size(this UIImage image, float width, float height) { var size = new CGSize(width, height); UIGraphics.BeginImageContextWithOptions(size, false, 0f); image.Draw(new RectangleF(0, 0, width, height)); var resultImage = UIGraphics.GetImageFromCurrentImageContext(); UIGraphics.EndImageContext(); return resultImage; }
UIImageのサイズを変えたいときに。