เอฟเฟกต์ UIImageView พื้นหลังเบลอ (Swift 4)

ฉันกำลังพยายามทำให้ได้เอฟเฟกต์เบลอนี้ด้วย UIImageView ของฉัน: ป้อนคำอธิบายรูปภาพที่นี่

ฉันไม่ทำถ้ามันเป็นไปได้ ฉันได้ลองเล่นกับ UIVisualEffectView และ UIBlurEffect แล้ว แต่ฉันไม่มีโชค มีความคิดอะไรบ้างโปรด? ขอบคุณ


person Vitalyz123    schedule 04.03.2018    source แหล่งที่มา


คำตอบ (1)


ฉันมีตัวอย่างสำหรับ NSVisualEffectView บางทีคุณอาจลองแปลงเป็น UIVisualEffectView:

func applyBlurToWindow() {
    // define the visual effect view
    self.blurView = NSVisualEffectView(frame: NSRect(x: 0, y: 0, width: (NSApplication.shared.windows.first?.frame.width)!, height: (NSApplication.shared.windows.first?.frame.height)!))
    // this is default value but is here for clarity
    blurView?.blendingMode = NSVisualEffectView.BlendingMode.behindWindow
    // set the background to always be the dark blur
    blurView?.material = NSVisualEffectView.Material.mediumLight
    blurView?.wantsLayer = true
    blurView?.layer?.backgroundColor = NSColor.clear.cgColor
    blurView?.layer?.masksToBounds = true
    blurView?.layerUsesCoreImageFilters = true
    blurView?.layer?.needsDisplayOnBoundsChange = true
    let satFilter = CIFilter(name: "CIColorControls")
    satFilter?.setDefaults()
    satFilter?.setValue(NSNumber(value: 0.0), forKey: "inputSaturation")
    let blurFilter = CIFilter(name: "CIGaussianBlur")
    blurFilter?.setDefaults()
    blurFilter?.setValue(NSNumber(value: 2.0), forKey: "inputRadius")
    blurView?.layer?.backgroundFilters = [satFilter!, blurFilter!]

    // set it to always be blurry regardless of window state
    if let window = NSApplication.shared.windows.first {
        window.acceptsMouseMovedEvents = true
        blurView?.state = .active
        window.contentView?.addSubview(blurView!)
    }
}

func removeBlurredView(){
    blurView?.state = .inactive
    blurView?.layer?.backgroundFilters = nil
    self.blurView?.removeFromSuperview()
}

PS: ฉันได้รับรหัสนี้จากแหล่งอื่น (ซึ่งฉันลืม)

person triandicAnt    schedule 04.03.2018
comment
ขอบคุณสำหรับคำตอบ! แน่นอนฉันจะลองทำดู แต่วิธีการเกือบทั้งหมดแตกต่างกัน - person Vitalyz123; 04.03.2018