Swiftのこの関数の正しい構文は何ですか?
以下は正常に機能し、背景を紫色にします。
self.view.backgroundColor = UIColor.purpleColor()
ColorWithAlphaComponent関数をチェーンすると、ビューにはしばらくの間正しいアルファが表示され、その後、比較的暗い不透明な紫色に変わります。
self.view.backgroundColor = UIColor.purpleColor().colorWithAlphaComponent(0.5)
これは、UIColorにアルファ値を追加するための推奨機能ですか?
さらに、なぜこの関数はパラメーターとしてUIColorを期待しているとインテリセンスポップアップが表示するのですか?例えば。、
self.view.backgroundColor = UIColor.colorWithAlphaComponent(<#UIColor#>)
編集:動作は奇妙です。モーダルで読み込まれているView Controllerの背景色を設定しています。モーダルが下から上にスライドするので、アルファは正しいです。モーダルの読み込みが完了すると、背景色が不透明に変わります!?
編集2:問題はコードにありませんでした-上記のコードと以下の提案の両方が適切にアルファを適用していました。問題は、モーダルの表示方法であり、基礎となるビューが削除されています。見る:
Navigation Controllerの透過モード表示
それは奇妙なことではなく、本来どおりに動作しています。 UIColorのメソッドの多くはクラスメソッドですが、まだいくつかのインスタンスメソッドがあり、これもその1つです。 IColorドキュメント から。
colorWithAlphaComponent:
レシーバーと同じ色空間とコンポーネント値を持つが、指定されたアルファコンポーネントを持つカラーオブジェクトを作成して返します。
したがって、colorWithAlphaComponent:は、レシーバーのアルファ値を変更するだけです。例:
let purple = UIColor.purpleColor() // 1.0 alpha
let semi = purple.colorWithAlphaComponent(0.5) // 0.5 alpha
そして、このタイプのインスタンスメソッドのオートコンプリートが表示される理由は、Swiftを使用すると、インスタンスメソッドをカリー化されたタイプメソッドとして使用できるためです。指定した例では、colorWithAlphaComponent
は、入力としてCGFloat
を取り、UIColor
を返す関数を実際に返します。
let purple = UIColor.purpleColor()
let purpleFunc: (CGFloat -> UIColor) = UIColor.colorWithAlphaComponent(purple)
そのため、必要に応じて、変更するインスタンスを渡すtypeメソッドを呼び出してから、適用するアルファを使用して結果の関数を呼び出すことができます。
let purple = UIColor.purpleColor()
let purpleTrans = UIColor.colorWithAlphaComponent(purple)(0.5)
モーダルビューコントローラーで発生している問題に関する限り、モーダルビューコントローラーのビューのアルファを変更しようとしてはなりません。 詳細はこちらをご覧ください 。代わりに、手動でビューを作成し、既存のView Controllerのビュー階層に追加する必要があります(そのアルファを絶対に変更する必要がある場合)
Swift 4.
self.view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
in Swift 3.
これはxcode 8.2で機能します。
yourView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
役に立つかもしれません。
このようなsmthを試して色を設定してください
view.backgroundColor = UIColor(red: (64/255.0), green: (54/255.0), blue: (105/255.0), alpha: 1.0)
UIColor
はUIKitの一部であるため、SwiftUIでColor
に置き換えられました。同等のメソッドは.opacity(_ opacity: Double)
です。例:
Color.purple.opacticy(0.5)