打开 SWRevealController 菜单后如何使视图不可见 - Swift
How to make View not visible after opening SWRevealController menu - Swift
我目前正在努力做到这一点,以便当用户使用我的应用程序时,用户将看到一个动画视图,上面写着,"Slide Left to Bring out Menu!"我希望在用户向左滑动到拿出菜单。
这里有一些 screenshots/diagrams 说明了我的意思:
我尝试了一些在互联网上查找的代码,例如(animView 是包含标签的视图,"Slide Left to Bring Out Menu"),但是这个解决方案不起作用:
if (self.revealViewController().frontViewPosition != FrontViewPosition.left) {
animView.isHidden = true
}
else if (self.revealViewController().frontViewPosition == FrontViewPosition.left){
animView.isHidden = false
}
编辑:我已经尝试了下面评论中提出的解决方案,但是我不确定如何使用它。以下是我尝试过的:
func revealController(revealController: SWRevealViewController!, didMoveToPosition position: FrontViewPosition) {
switch(position){
case FrontViewPosition.leftSideMost: break
animView.isHidden = true
default:
break
}
}
CLASS 中的完整代码与 ANIMVIEW
import Foundation
import UIKit
import SVProgressHUD
import Canvas
class WebViewHome: UIViewController, UIWebViewDelegate, SWRevealViewControllerDelegate{
@IBOutlet weak var WebViewTst: UIWebView!
@IBOutlet weak var animView: CSAnimationView!
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.topItem!.title = "Home"
let URL = NSURL(string: "https://gunnoracle.com/")
WebViewTst.loadRequest(NSURLRequest(url: URL! as URL) as URLRequest)
let topSpace = -190
let bottomSpace = -3045
let leftSpace = -40
let rightSpace = -40
WebViewTst.scrollView.contentInset = UIEdgeInsets(top: CGFloat(topSpace), left: CGFloat(leftSpace), bottom: CGFloat(bottomSpace), right: CGFloat(rightSpace))
WebViewTst.scrollView.bounces = false
WebViewTst.scrollView.maximumZoomScale = 1.0
WebViewTst.scrollView.minimumZoomScale = 1.0
WebViewTst.delegate = self
}
private func revealController(revealController: SWRevealViewController!, didMoveToPosition position: FrontViewPosition) {
if (revealController.frontViewPosition == FrontViewPosition.leftSide){
}
else{
}
}
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
switch navigationType {
case .linkClicked:
let topSpace = -170
let bottomSpace = -2840
let leftSpace = -40
let rightSpace = -40
animView.startCanvasAnimation()
WebViewTst.scrollView.contentInset = UIEdgeInsets(top: CGFloat(topSpace), left: CGFloat(leftSpace), bottom: CGFloat(bottomSpace), right: CGFloat(rightSpace))
WebViewTst.scrollView.bounces = false
WebViewTst.scrollView.maximumZoomScale = 1.0
WebViewTst.scrollView.minimumZoomScale = 1.0
WebViewTst.delegate = self
default:
break
}
return true
}
func webViewDidStartLoad(_ webView: UIWebView) {
SVProgressHUD.show(withStatus: "Loading...")
SVProgressHUD.setDefaultStyle(SVProgressHUDStyle.dark)
SVProgressHUD.setRingThickness(1.0)
NSLog("Webview has started loading")
}
func webViewDidFinishLoad(_ webView: UIWebView) {
SVProgressHUD.dismiss()
NSLog("Webview has successfully loaded")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
因为第一次显示标签(第一个问题):
您可以使用 SWreveal 的 didMoveToPosition
方法来识别用户是否滑动了菜单。并检查是否 revealController.frontViewPosition == FrontViewPositionRight
然后隐藏标签并在 SQLite 中保存一条记录,该记录表明用户已经滑动了 left-side 菜单。并在ViewDidLoad
或ViewWillAppear
中用SQLite记录检查标签是否需要显示。您可以使用 FMDB:github.com/ccgus/fmdb
对于UILabel位置(第二题):
应该是2个子视图(webview是第一个子视图,label是另一个子视图)。您可以在 whosebug.com/questions/4631878/
中学习
记住:
首先,不要private
委托不能[=52的revealController
函数=] 添加 SWRevealViewControllerDelegate
其次,你忘了把self.revealViewController().delegate = self
放在ViewDidAppear
我目前正在努力做到这一点,以便当用户使用我的应用程序时,用户将看到一个动画视图,上面写着,"Slide Left to Bring out Menu!"我希望在用户向左滑动到拿出菜单。
这里有一些 screenshots/diagrams 说明了我的意思:
我尝试了一些在互联网上查找的代码,例如(animView 是包含标签的视图,"Slide Left to Bring Out Menu"),但是这个解决方案不起作用:
if (self.revealViewController().frontViewPosition != FrontViewPosition.left) {
animView.isHidden = true
}
else if (self.revealViewController().frontViewPosition == FrontViewPosition.left){
animView.isHidden = false
}
编辑:我已经尝试了下面评论中提出的解决方案,但是我不确定如何使用它。以下是我尝试过的:
func revealController(revealController: SWRevealViewController!, didMoveToPosition position: FrontViewPosition) {
switch(position){
case FrontViewPosition.leftSideMost: break
animView.isHidden = true
default:
break
}
}
CLASS 中的完整代码与 ANIMVIEW
import Foundation
import UIKit
import SVProgressHUD
import Canvas
class WebViewHome: UIViewController, UIWebViewDelegate, SWRevealViewControllerDelegate{
@IBOutlet weak var WebViewTst: UIWebView!
@IBOutlet weak var animView: CSAnimationView!
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.topItem!.title = "Home"
let URL = NSURL(string: "https://gunnoracle.com/")
WebViewTst.loadRequest(NSURLRequest(url: URL! as URL) as URLRequest)
let topSpace = -190
let bottomSpace = -3045
let leftSpace = -40
let rightSpace = -40
WebViewTst.scrollView.contentInset = UIEdgeInsets(top: CGFloat(topSpace), left: CGFloat(leftSpace), bottom: CGFloat(bottomSpace), right: CGFloat(rightSpace))
WebViewTst.scrollView.bounces = false
WebViewTst.scrollView.maximumZoomScale = 1.0
WebViewTst.scrollView.minimumZoomScale = 1.0
WebViewTst.delegate = self
}
private func revealController(revealController: SWRevealViewController!, didMoveToPosition position: FrontViewPosition) {
if (revealController.frontViewPosition == FrontViewPosition.leftSide){
}
else{
}
}
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
switch navigationType {
case .linkClicked:
let topSpace = -170
let bottomSpace = -2840
let leftSpace = -40
let rightSpace = -40
animView.startCanvasAnimation()
WebViewTst.scrollView.contentInset = UIEdgeInsets(top: CGFloat(topSpace), left: CGFloat(leftSpace), bottom: CGFloat(bottomSpace), right: CGFloat(rightSpace))
WebViewTst.scrollView.bounces = false
WebViewTst.scrollView.maximumZoomScale = 1.0
WebViewTst.scrollView.minimumZoomScale = 1.0
WebViewTst.delegate = self
default:
break
}
return true
}
func webViewDidStartLoad(_ webView: UIWebView) {
SVProgressHUD.show(withStatus: "Loading...")
SVProgressHUD.setDefaultStyle(SVProgressHUDStyle.dark)
SVProgressHUD.setRingThickness(1.0)
NSLog("Webview has started loading")
}
func webViewDidFinishLoad(_ webView: UIWebView) {
SVProgressHUD.dismiss()
NSLog("Webview has successfully loaded")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
因为第一次显示标签(第一个问题):
您可以使用 SWreveal 的 didMoveToPosition
方法来识别用户是否滑动了菜单。并检查是否 revealController.frontViewPosition == FrontViewPositionRight
然后隐藏标签并在 SQLite 中保存一条记录,该记录表明用户已经滑动了 left-side 菜单。并在ViewDidLoad
或ViewWillAppear
中用SQLite记录检查标签是否需要显示。您可以使用 FMDB:github.com/ccgus/fmdb
对于UILabel位置(第二题):
应该是2个子视图(webview是第一个子视图,label是另一个子视图)。您可以在 whosebug.com/questions/4631878/
中学习记住:
首先,不要private
委托不能[=52的revealController
函数=] 添加 SWRevealViewControllerDelegate
其次,你忘了把self.revealViewController().delegate = self
放在ViewDidAppear