2017-02-07 3 views
1

В настоящее время я пытаюсь сделать так, чтобы, когда пользователь использует мое приложение, пользователь увидит представление анимации, в котором говорится: «Слайд влево, чтобы вывести меню!». Я хочу, чтобы это представление не отображалось, когда пользователь скользит влево, чтобы вывести меню.Как сделать вид невидимым после открытия меню SWRevealController - Swift

Вот некоторые скриншоты/диаграмма показывает, что я имею в виду:

Demonstration

Demonstration2

Я попробовал некоторый код, который я смотрел на интернете, такие как (animView быть, содержащим метка "Slide слева Bring Out Menu"), однако это решение не работает:

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

     animView.isHidden = true 

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

EDIT: Я пробовал предлагаемые решения в комментариях ниже, однако я не уверен, как это использовать. Ниже то, что я пробовал:

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

} 
+0

Чтобы показать один раз на этикетке, вы можете использовать sqlite, чтобы помнить пользователя, который пользователь скользит. Вот статья для распознавания слайда: https://github.com/John-Lluch/SWRevealViewController/issues/492 –

+0

@JackyShek вы могли бы дать дополнительную информацию о том, как это сделать. Я был бы очень признателен. Я все еще очень смущен. –

+1

Для первой проблемы вы можете использовать метод 'didMoveToPosition' для SWreveal для распознавания того, что пользователь проверил меню. Проверьте это, если 'opensController.frontViewPosition == FrontViewPositionRight' затем скрыть метку и сохранить запись в SQLite, которую пользователь проверил в левом меню.И проверьте, что метка должна показывать или нет с записью SQLite в 'viewDidLoad'. Вы можете использовать FMDB: https://github.com/ccgus/fmdb –

ответ

1

Для только с указанием метки на первый раз (первая проблема):

Вы можете использовать метод SWreveal didMoveToPosition для распознавания того, что пользователь проверил меню. И проверьте, что если revealController.frontViewPosition == FrontViewPositionRight затем скрыть ярлык и сохранить запись в SQLite, пользователь уже проверил меню слева. И проверьте, что метка должна показать или нет с записью SQLite в ViewDidLoad или ViewWillAppear. Вы можете использовать FMDB: github.com/ccgus/fmdb

Для позиции UILabel (вторая проблема):

Это должно быть 2 подвидов (WebView является первыми подвидами и метка еще подвиды). Вы можете узнать его в stackoverflow.com/questions/4631878/

Помните, что:

Первый, не privaterevealController функция, делегат не может быть worked.Also добавить SWRevealViewControllerDelegate

Второй, вы забываете поставить self.revealViewController().delegate = self в ViewDidAppear

+0

У меня возникли проблемы с созданием подзаголовка uiwebview на верхней части существующего uiview. Я также хотел бы, чтобы вы могли помочь мне в том, как я могу хранить данные в SQLite. Я не уверен, как это использовать. Thanks –

+0

В чем проблема, с которой вы сталкиваетесь ??? Для использования SQLite вы можете использовать библиотеку FMDB. вот урок: http://www.appcoda.com/fmdb-sqlite-database/ –

+0

Привет, мне было интересно, можете ли вы проверить мой последний вопрос и посмотреть, есть ли у вас идея решить эту проблему. Спасибо –

Смежные вопросы