【问题标题】:How to make View not visible after opening SWRevealController menu - Swift打开 SWRevealController 菜单后如何使视图不可见 - Swift
【发布时间】:2017-06-24 05:47:20
【问题描述】:

我目前正在尝试这样做,以便当用户使用我的应用程序时,用户会看到一个动画视图,上面写着“向左滑动以显示菜单!”一旦用户向左滑动以显示菜单,我希望不显示此视图。

这里有一些屏幕截图/图表显示了我的意思:

我尝试了一些我在互联网上查找的代码,例如(animView 是包含标签的视图,“向左滑动以显示菜单”),但是这个解决方案不起作用:

if (self.revealViewController().frontViewPosition != FrontViewPosition.left) {

        animView.isHidden = true

    }
    else if (self.revealViewController().frontViewPosition == FrontViewPosition.left){
        animView.isHidden = false
    }

编辑:我已经在下面的 cmets 中尝试了建议的解决方案,但是我不确定如何使用它。以下是我尝试过的:

func revealController(revealController: SWRevealViewController!, didMoveToPosition position: FrontViewPosition) {
        switch(position){
        case FrontViewPosition.leftSideMost: break

            animView.isHidden = true


        default:
            break
        }
    }

与 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.
}

}

【问题讨论】:

  • 为了在标签上显示一次,您可以使用 sqlite 来记住用户该用户幻灯片。这是一篇识别滑出的文章:github.com/John-Lluch/SWRevealViewController/issues/492
  • @JackyShek 您能否提供更多有关如何执行此操作的信息。我会很感激的。我还是很困惑。
  • 对于第一个问题,您可以使用 SWreveal 的didMoveToPosition 方法来识别用户滑动菜单。检查是否revealController.frontViewPosition == FrontViewPositionRight 然后隐藏标签并在 SQLite 中保存用户滑动左侧菜单的记录。并使用viewDidLoad 中的 SQLite 记录检查需要显示的标签。您可以使用 FMDB:github.com/ccgus/fmdb
  • 对于第二个问题,应该是2个子视图(标签在一个子视图中,webview是另一个子视图)。你可以在stackoverflow.com/questions/4631878/…学习
  • @JackyShek 所以,我尝试了第一个问题的解决方案,但是,当我使用func revealController(revealController: SWRevealViewController!, didMoveToPosition position: FrontViewPosition) { if (revealController.frontViewPosition == FrontViewPosition.right){ animView.isHidden = true } }

标签: ios swift xcode swrevealviewcontroller


【解决方案1】:

第一次只显示标签(第一个问题)

您可以使用 SWreveal 的didMoveToPosition 方法来识别用户滑动了菜单。并检查如果revealController.frontViewPosition == FrontViewPositionRight 然后隐藏标签并在 SQLite 中保存用户已经刷过左侧菜单的记录。并通过ViewDidLoadViewWillAppear 中的SQLite 记录检查需要显示的标签。您可以使用 FMDB:github.com/ccgus/fmdb

对于 UILabel 位置(第二个问题):

应该是 2 个子视图(webview 是第一个子视图,标签是另一个子视图)。你可以在stackoverflow.com/questions/4631878/学习它

记住

首先,不要private代理不能工作的revealController函数。另外加上SWRevealViewControllerDelegate

第二,你忘了把self.revealViewController().delegate = self放在ViewDidAppear

【讨论】:

  • 我在使 uiwebview 的子视图向上滑动到预先存在的 uiview 上时遇到了一些麻烦。如果您能帮助我了解如何将数据存储在 SQLite 中,我也很高兴。我不确定如何使用它。谢谢
  • 您面临的问题是什么?要使用 SQLite,您可以使用 FMDB 库。这是教程:appcoda.com/fmdb-sqlite-database
  • 您好,我想知道您是否可以查看我的最新问题,看看您是否知道如何解决此问题。谢谢
  • 对不起,我在trouble in making the uiwebview's subview slide up on top of the preexisting uiview 上不明白你的意思。请更具体地告诉我。
  • 我通过在函数末尾添加 self.view.layoutIfNeeded() 来处理上滑动画的问题
猜你喜欢
  • 2016-10-17
  • 2017-12-21
  • 2023-04-10
  • 2021-05-31
  • 2013-01-21
  • 2017-08-22
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
相关资源
最近更新 更多