2016-12-17 4 views
-1

私のプロジェクトでtabBarItemsのカスタムアイコンを設定しようとしています(デフォルトのオプションは非常に限られているため)。UIImageエクステンションが正常に動作しない

明らかに、私はUIImage拡張機能を使って手動でやろうとしているので、アイコンは30 x 30になるように自動的に調整されません。私は一度か二度の拡張機能を使用している、と私は本当にやろうとしていますそれはすべての拡張のための私の試みは以下の通りですスウィフト3にthis answerを変換である:それは明確でない場合は

extension UIImage { 

    func scaledToSize(size: CGSize) -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(size, false, 0.0) 
     images?[0].draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height)) 
     let image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return image! 
    } 

} 

は、この拡張機能を想定しています私の目的を達成するために、このように使用する:

self.tabBarItem.image = tabBarItemImage?.scaledToSize(size: CGSize(width: 30, height: 30)) 

Iはそのまま、これが最もエレガントな解決策ではありませんが、私はそれが仕事だろうと思ったし、そうでないことを理解しています。私は単純なimageViewでそれを使用しようとしましたが、どちらかで動作しないので、このテクニックをtabBarItemsで使用する際の問題ではないと思います。

誰かが私が間違っていることを指摘したり、正しい方向に私を案内してくれればそれは大いに感謝します。延長以下

+0

正直、愚かな質問 - あなたは右の正しいcontentModeセットを持っていますか?もしそうなら、私の目を引っ張ったのは** images?[0] .draw "です。あなたは" single "UIImageエクステンションでそれを行うべきかどうかは分かりません – dfd

+0

@dfdあなたはどんなcontentModeを参照していますか? 2回目のコメントで詳しく説明できますか?変更は1度に1枚の写真に適用するだけなので、配列の最初の画像を使用するのが安全であると思います。 –

+0

UIImage.contentMode ==あなたが望むようにイメージのプロパティを "フィット"させることができます。UIImageViewを使って、基本的なことをしています。 UIImageViewのイメージプロパティは単数であるため、UIImage拡張をコーディングする場合は、サブクラス化とほぼ同じです(** image [0] "を参照することはできません)。 (私はUITabBarViewなどで期待しているかもしれません) – dfd

答えて

0

試して、

extension UIImageView { 
    func scaledToSize(size: CGSize){ 
     UIGraphicsBeginImageContextWithOptions(size, false, 0.0) 
     self.image!.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height)) 
     let imageed = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     self.image = imageed 
    } 
} 
関連する問題