HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – UIVisualEffectView不会模糊它的SKView超级视图大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在写一个SpriteKit游戏,并且遇到了一个模糊视图的问题,它位于SKView上.它应该在游戏暂停时从右侧滑动,它应该像iOS 7中的控制中心面板一样模糊其父视图(SKView)的内容.这是所需的外观:

我实际得到的是:

实际上左边的视图并不是完全黑色的,你可以看到超视图中的高光是如何在几乎不透明的子视图中略微挣扎,但是没有应用模糊.它是iOS 8的bug /功能,还是我的错误/误解

这是我的UIVisualEffectView子类的基本内容

class OptionsView: UIVisualEffectView {
//...
    init(size: CGSizE) {
        buttons = [UIButton]()
        super.init(effect: UIBlurEffect(style: .Dark))
        frame = CGRectMake(-size.width,size.width,size.height)
        addButtons()
        clipsToBounds = true
    }
    func show() {
        UIView.animateWithDuration(0.3,animations: {
            self.frame.origin.x = 0
        })
    }
    func hide() {
        UIView.animateWithDuration(0.3,animations: {
            self.frame.origin.x = -self.frame.size.width
        })
    }

然后在GameScene类中:

在初始化程序中:

optionsView = OptionsView(size: CGSizeMake(130,size.height))

在didMoveToView中(查看:SKView):

view.addSubview(optionsView)

按下暂停按钮:

self.optionsView.show()

附:然我知道另外两种实现模糊视图的方法,但我认为这是最简单的方法,因为我的应用程序仅支持iOS8

>从superview渲染模糊的静态图像 – >
将uIImageView放在OptionsView上,其中clipsToBounds = true – >
动画UIImageView位置,同时为optionsView位置设置动画,使模糊相对于superview保持相对
>忘掉UIView,UIVisualEffectView和UIBlurView,并将SKEffectNode与SKCropNode一起使用.

解决方法

好吧,我已经设法使用SKEffectNode而不是UIVisualEffectView获得所需的效果.
以下是面临同一问题的人的代码

class BlurCropNode: SKCropNode {
    var blurNode: BlurNode
    var size: CGSize
    init(size: CGSizE) {
        self.size = size
        blurNode = BlurNode(radius: 10)
        super.init()
        addChild(blurNodE)
        let mask = SKSpriteNode (color: UIColor.blackColor(),size: sizE)
        mask.anchorPoint = CGPoint.zeroPoint
        maskNode = mask
    }
}

class BlurNode: SKEffectNode {
    var sprite: SKSpriteNode
    var texture: SKTexture {
        get { return sprite.texture }
        set {
            sprite.texture = newValue
            let scale = UIScreen.mainScreen().scale
            let textureSize = newValue.size()
            sprite.size = CGSizeMake(textureSize.width/scale,textureSize.height/scalE)
        }
    }
    init(radius: CGFloat) {
        sprite = SKSpriteNode()
        super.init()
        sprite.anchorPoint = CGPointMake(0,0)
        addChild(spritE)
        filter = CIFilter(name: "CIGaussianBlur",withInputParameters: ["inpuTradius": radius])
        shouldEnableEffects = true
        shouldRasterize = true
    }
}

结果:

但是有几个问题

>在将shouldRasterize属性设置为true之前,裁剪不适用于SKEffectNode.我让整个屏幕变得模糊.所以我仍然不知道如何正确实现实时模糊.
> BlurCropNode上的动画不够流畅.由于捕获纹理并将其设置为effectNode的精灵子项,因此在开始时存在滞后.甚至dispatch_async也无济于事.

如果有人能帮助解决至少一个问题,将非常感激

大佬总结

以上是大佬教程为你收集整理的ios – UIVisualEffectView不会模糊它的SKView超级视图全部内容,希望文章能够帮你解决ios – UIVisualEffectView不会模糊它的SKView超级视图所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。