2016-08-07 19 views
0

Ich verwende ein Folienmenü in meiner App, das ich mit SWRevealViewController erstellt habe. Jetzt möchte ich die FrontView verwischen, wenn der Benutzer das Menü öffnet. Wie ist das möglich? Meine Idee wäre eine Unschärfeansicht im FrontViewController mit einem Alpha-Wert von 0 zu haben. Wenn der Benutzer das Menü öffnet, ändert sich der Alpha-Wert zu 1. Meine Frage ist, ob es eine bestimmte Funktion gibt, die aufgerufen wird, wenn der Benutzer das Menü öffnet.Verwende FontView, wenn das Menü SWRevealViewController geöffnet wird

Wenn möglich die blurView's Alpha-Wert sollte in gleicher Weise auf den Durchzugs ändern, die das Menü öffnet sich: Wenn der Benutzer die GestureRecognizer verwendet das Menü zu öffnen, um die Bewegung des menuViewController und die Änderung des Alpha-Wert sollte gleich gehen.

Ich hoffe, Sie können mein Problem verstehen. Vielen Dank für Ihre Hilfe!

Antwort

0

Ich hatte auf Ihre Frage gearbeitet, und dies sind meine Ergebnisse,

enter image description here

Vor allem in der SWRevealViewControllerDelegate Sie haben drei Methoden von Änderungen an der revealViewController bemerkt 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) { 
} 
zu erhalten

So müssen Sie Ihre FrontViewController als Delegierten von SWRevealViewController

machen 10

wie diese self.revealViewController().delegate = self

und dann eine Erweiterung von https://www.raywenderlich.com/84043/ios-8-visual-effects-tutorial genannt UIImage+ImageEffects durch das Tutorial, die auf dem Beispiel-Code gegründet, können wir ein Bild von frontViewController.view erstellen und die Gaußsche Unschärfe aus der genannten Kategorie anwenden Dies ist der Code

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 
    } 


} 

ich hoffe, das Sie

+0

hilft Es ist fantastisch! Vielen Dank – Julian135

Verwandte Themen