5

UIView効果として aを持つUIVisualEffectViewサブビューで aを作成しようとしてUIBlurEffectいます。ビューは画面の端から作成され、アニメーションを使用してスライドされます。

シミュレーターではすべて正常に動作しますが (iPhone 4S と iPhone 6 でテストしました)、私の携帯電話 (iPhone 6) ではぼかしはぼやけておらず、alpha0.5 の暗い灰色のように見えます。さらに、デバイスのスクリーンショットを撮ったり、ホーム画面から開いたりすると、一貫性のあるレンダリングが再開される前に、その 1 つのフレームに対してブラーがレンダリングされます。

現時点でのビューのスクリーンショットを次に示します。 ここに画像の説明を入力

ただし、デバイスではぼかしはありません。本質的には、暗くて透明なビューです。

ビューを初期化するために使用するコードは次のとおりです。blurViewおよびvibrancyViewプロパティはグローバル変数として宣言されています。

init(left: Bool){
    self.left = left
    let screenSize = UIScreen.mainScreen().bounds.size

    var rect: CGRect
    if left{
        rect = CGRectMake(-screenSize.width*0.3, 0, screenSize.width*0.3, screenSize.height)
    }else{
        rect = CGRectMake(screenSize.width, 0, screenSize.width*0.3, screenSize.height)
    }

    super.init(frame: rect)
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
    blurView = UIVisualEffectView(effect: blurEffect)
    blurView.frame = CGRectMake(0, 0, self.frame.width, self.frame.height)
    self.addSubview(blurView)
    let vibrancy = UIVibrancyEffect(forBlurEffect: blurEffect)
    vibrancyView = UIVisualEffectView(effect: vibrancy)
    vibrancyView.frame = blurView.frame
    blurView.addSubview(vibrancyView)

    self.userInteractionEnabled = true
}

そして、blurView を含む superView を次の場所に移動します。

func moveIn(){
    UIView.animateWithDuration(0.3, animations: { () -> Void in
        var center = self.center
        if self.left{
            center.x = UIScreen.mainScreen().bounds.size.width*0.15
        }else{
            center.x = UIScreen.mainScreen().bounds.size.width*0.85
        }
        self.center = center
    })
}

前に言ったように、アニメーションなどは正常に機能しますが、blurView はぼやけません。

これで何が起こっているのかわかりません。フレームのレンダリングに関係していると思いますが、私は教祖ではないので、誰かアイデアがあれば感謝します.

4

2 に答える 2

3

これを締めくくるには、アプリの大部分で SpriteKit を使用しているため、UIView ではなく SKView を使用しているためです。質問でこれについて言及しなかったことは承知していますが、それが問題になることを知りませんでした。どうやら SKView は別のレンダリング パスに従うため、ぼやけません。推奨される方法はエフェクト ノードです。

于 2015-02-09T09:01:54.547 に答える
0

blurView.frame = CGRectMake(0, 0, self.frame.width, self.frame.height)init メソッドのインラインは、 self.framelayoutSubviews の前にゼロにすることができます。self.frame が存在する場合、blurView フレームを設定します

于 2015-02-12T12:20:20.397 に答える