当 SWRevealViewController 菜单打开时模糊 FontView
Blur the FontView when SWRevealViewController menu opens
我在使用 SWRevealViewController
创建的应用程序中使用了一个幻灯片菜单。现在我想在用户打开菜单时模糊 FrontView
。这怎么可能?我的想法是在 FrontViewController
中有一个 blurView,alpha 值为 0。当用户打开菜单时,alpha 值变为 1。我的问题是当用户打开菜单时是否有一个特定的函数被调用?
如果可能,blurView's
alpha 值的变化应与打开菜单的滑动相同:当用户使用 GestureRecognizer
打开菜单时,menuViewController
的移动alpha 值的变化应该相等。
希望你能理解我的问题。
感谢您的帮助!
我一直在研究你的问题,这是我的结果,
首先,在 SWRevealViewControllerDelegate
中,您有 3 种方法可以注意到 revealViewController panGestureRecognizer
func revealController(revealController: SWRevealViewController!, panGestureBeganFromLocation location: CGFloat, progress: CGFloat) {
}
func revealController(revealController: SWRevealViewController!, panGestureMovedToLocation location: CGFloat, progress: CGFloat, overProgress: CGFloat) {
}
func revealController(revealController: SWRevealViewController!, panGestureEndedToLocation location: CGFloat, progress: CGFloat, overProgress: CGFloat) {
}
所以你需要让你的 FrontViewController
成为 SWRevealViewController
的代表
像这样self.revealViewController().delegate = self
然后使用 https://www.raywenderlich.com/84043/ios-8-visual-effects-tutorial 的扩展名 UIImage+ImageEffects
基于教程提供的示例代码,我们可以从 frontViewController.view 创建图像并应用高斯模糊提到类别这是代码
import UIKit
class MainViewController: UIViewController,SWRevealViewControllerDelegate {
var imageBlur : UIImageView?
var originalImage : UIImage?
let maxRadius : CGFloat = 5.0
let minRadius = 0
var arrayOfImages : [UIImage]?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
self.originalImage = self.takeSnapShotOfView(self.view)
self.imageBlur = UIImageView(image: self.originalImage)
self.view.addSubview(self.imageBlur!)
}
func revealController(revealController: SWRevealViewController!, panGestureBeganFromLocation location: CGFloat, progress: CGFloat) {
let image = self.originalImage
self.imageBlur?.image = image?.applyFixedBlurWithRadius(CGFloat(progress*self.maxRadius))
}
func revealController(revealController: SWRevealViewController!, panGestureMovedToLocation location: CGFloat, progress: CGFloat, overProgress: CGFloat) {
let image = self.originalImage
self.imageBlur?.image = image?.applyFixedBlurWithRadius(CGFloat(progress*self.maxRadius))
}
func revealController(revealController: SWRevealViewController!, panGestureEndedToLocation location: CGFloat, progress: CGFloat, overProgress: CGFloat) {
let image = self.originalImage
self.imageBlur?.image = image?.applyFixedBlurWithRadius(CGFloat(progress*self.maxRadius))
}
func revealController(revealController: SWRevealViewController!, willMoveToPosition position: FrontViewPosition) {
if(position == .Left)
{
self.imageBlur?.image = self.originalImage
}
if(position == .Right)
{
let image = self.originalImage
self.imageBlur?.image = image?.applyFixedBlurWithRadius(CGFloat(1*self.maxRadius))
}
}
func takeSnapShotOfView(view:UIView) ->UIImage
{
UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width, view.frame.size.height))
view.drawViewHierarchyInRect(CGRectMake(0, 0, view.frame.size.width, view.frame.size.height), afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
希望对您有所帮助
我在使用 SWRevealViewController
创建的应用程序中使用了一个幻灯片菜单。现在我想在用户打开菜单时模糊 FrontView
。这怎么可能?我的想法是在 FrontViewController
中有一个 blurView,alpha 值为 0。当用户打开菜单时,alpha 值变为 1。我的问题是当用户打开菜单时是否有一个特定的函数被调用?
如果可能,blurView's
alpha 值的变化应与打开菜单的滑动相同:当用户使用 GestureRecognizer
打开菜单时,menuViewController
的移动alpha 值的变化应该相等。
希望你能理解我的问题。 感谢您的帮助!
我一直在研究你的问题,这是我的结果,
首先,在 SWRevealViewControllerDelegate
中,您有 3 种方法可以注意到 revealViewController panGestureRecognizer
func revealController(revealController: SWRevealViewController!, panGestureBeganFromLocation location: CGFloat, progress: CGFloat) {
}
func revealController(revealController: SWRevealViewController!, panGestureMovedToLocation location: CGFloat, progress: CGFloat, overProgress: CGFloat) {
}
func revealController(revealController: SWRevealViewController!, panGestureEndedToLocation location: CGFloat, progress: CGFloat, overProgress: CGFloat) {
}
所以你需要让你的 FrontViewController
成为 SWRevealViewController
像这样self.revealViewController().delegate = self
然后使用 https://www.raywenderlich.com/84043/ios-8-visual-effects-tutorial 的扩展名 UIImage+ImageEffects
基于教程提供的示例代码,我们可以从 frontViewController.view 创建图像并应用高斯模糊提到类别这是代码
import UIKit
class MainViewController: UIViewController,SWRevealViewControllerDelegate {
var imageBlur : UIImageView?
var originalImage : UIImage?
let maxRadius : CGFloat = 5.0
let minRadius = 0
var arrayOfImages : [UIImage]?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
self.originalImage = self.takeSnapShotOfView(self.view)
self.imageBlur = UIImageView(image: self.originalImage)
self.view.addSubview(self.imageBlur!)
}
func revealController(revealController: SWRevealViewController!, panGestureBeganFromLocation location: CGFloat, progress: CGFloat) {
let image = self.originalImage
self.imageBlur?.image = image?.applyFixedBlurWithRadius(CGFloat(progress*self.maxRadius))
}
func revealController(revealController: SWRevealViewController!, panGestureMovedToLocation location: CGFloat, progress: CGFloat, overProgress: CGFloat) {
let image = self.originalImage
self.imageBlur?.image = image?.applyFixedBlurWithRadius(CGFloat(progress*self.maxRadius))
}
func revealController(revealController: SWRevealViewController!, panGestureEndedToLocation location: CGFloat, progress: CGFloat, overProgress: CGFloat) {
let image = self.originalImage
self.imageBlur?.image = image?.applyFixedBlurWithRadius(CGFloat(progress*self.maxRadius))
}
func revealController(revealController: SWRevealViewController!, willMoveToPosition position: FrontViewPosition) {
if(position == .Left)
{
self.imageBlur?.image = self.originalImage
}
if(position == .Right)
{
let image = self.originalImage
self.imageBlur?.image = image?.applyFixedBlurWithRadius(CGFloat(1*self.maxRadius))
}
}
func takeSnapShotOfView(view:UIView) ->UIImage
{
UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width, view.frame.size.height))
view.drawViewHierarchyInRect(CGRectMake(0, 0, view.frame.size.width, view.frame.size.height), afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
希望对您有所帮助