在没有故事板的情况下使用 BWWalkthrough 库,Walkthrough Custom
Use BWWalkthrough Library without Storyboard, Walkthrough Custom
我将 BWWalkthrough 库用于我的个人演练。它的实现非常简单,但是我在使用 BWWalkthroughViewController 时犯了一个错误:我不会使用情节提要来创建这个主控制器,所以我通过代码创建了自定义视图,然后在 BWWalkthroughViewController 的 viewDidLoad 中设置了视图和 pageControl。其余代码与 github 存储库中的示例相同。
也就是BWWalkthroughViewController的viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
let welcomeview: WelcomeView = WelcomeView() // my custom view
view = welcomeview
self.pageControl = welcomeview.pageControl
...
}
并且,因为它是第一个视图,所以 rootViewController 设置为修改了 viewDidLoad 的 BWWalkthroughViewController。所以我有一个用于在 AppDelegate.swift:
中设置此演练的函数
func showWelcomeView() -> BWWalkthroughViewController{
let storyboard = UIStoryboard(name: "Welcome", bundle: nil)
let walkthrough: BWWalkthroughViewController = BWWalkthroughViewController()
let page_zero = storyboard.instantiateViewControllerWithIdentifier("walk_0") as! UIViewController
let page_one = storyboard.instantiateViewControllerWithIdentifier("walk_1") as! UIViewController
let page_two = storyboard.instantiateViewControllerWithIdentifier("walk_2") as! UIViewController
let page_three = storyboard.instantiateViewControllerWithIdentifier("walk_3") as! UIViewController
let page_four = storyboard.instantiateViewControllerWithIdentifier("walk_4") as! UIViewController
walkthrough.delegate = self
walkthrough.addViewController(page_zero)
walkthrough.addViewController(page_one)
walkthrough.addViewController(page_two)
walkthrough.addViewController(page_three)
walkthrough.addViewController(page_four)
return walkthrough
}
我在这里使用该功能:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = showWelcomeView() // func usedhere
return true
}
应用程序 运行 没有错误。我可以看到我的自定义视图和所有 4 个子视图(walk_0 ... walk_4),我可以滑动它们但不正确:可滚动是免费的并且不会在每一页上停止。
所以...我的自定义视图错过了一些步骤?请帮助我!
这是我的 IPhone 的屏幕截图,滚动条位于 2 个子视图之间:
你连接了吗
@IBOutlet var pageControl:UIPageControl?
在 BWWalkthroughViewController 中使用视图控制器中的页面控制器?
我已经通过在 BWWalkthroughViewController
中使用滚动视图的 属性 解决了这个问题
override func viewDidLoad() {
super.viewDidLoad()
..
scrollview.pagingEnabled = true
}
工作正常,但不知道为什么。该滚动视图的默认值是在 init:
中设置的 pagingeEnabled = true
required init(coder aDecoder: NSCoder) {
// Setup the scrollview
scrollview = UIScrollView()
scrollview.showsHorizontalScrollIndicator = false
scrollview.showsVerticalScrollIndicator = false
scrollview.pagingEnabled = true // Default of scrollview
// Controllers as empty array
controllers = Array()
super.init(coder: aDecoder)
}
在BWWalkthroughViewController
class中添加以下函数。
override func viewDidLayoutSubviews(){
// Constraints
let metricDict = ["w":view.bounds.size.width,"h":view.bounds.size.height]
// - Generic cnst
for vc in controllers {
vc.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[view(h)]", options:[], metrics: metricDict, views: ["view":vc.view]))
vc.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[view(w)]", options:[], metrics: metricDict, views: ["view":vc.view]))
scrollview.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[view]|", options:[], metrics: nil, views: ["view":vc.view,]))
}
}
从 addViewController
函数中删除以下行
// Constraints
let metricDict = ["w":vc.view.bounds.size.width,"h":vc.view.bounds.size.height]
// - Generic cnst
vc.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[view(h)]", options:[], metrics: metricDict, views: ["view":vc.view]))
vc.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[view(w)]", options:[], metrics: metricDict, views: ["view":vc.view]))
scrollview.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[view]|", options:[], metrics: nil, views: ["view":vc.view,]))
我将 BWWalkthrough 库用于我的个人演练。它的实现非常简单,但是我在使用 BWWalkthroughViewController 时犯了一个错误:我不会使用情节提要来创建这个主控制器,所以我通过代码创建了自定义视图,然后在 BWWalkthroughViewController 的 viewDidLoad 中设置了视图和 pageControl。其余代码与 github 存储库中的示例相同。
也就是BWWalkthroughViewController的viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
let welcomeview: WelcomeView = WelcomeView() // my custom view
view = welcomeview
self.pageControl = welcomeview.pageControl
...
}
并且,因为它是第一个视图,所以 rootViewController 设置为修改了 viewDidLoad 的 BWWalkthroughViewController。所以我有一个用于在 AppDelegate.swift:
中设置此演练的函数func showWelcomeView() -> BWWalkthroughViewController{
let storyboard = UIStoryboard(name: "Welcome", bundle: nil)
let walkthrough: BWWalkthroughViewController = BWWalkthroughViewController()
let page_zero = storyboard.instantiateViewControllerWithIdentifier("walk_0") as! UIViewController
let page_one = storyboard.instantiateViewControllerWithIdentifier("walk_1") as! UIViewController
let page_two = storyboard.instantiateViewControllerWithIdentifier("walk_2") as! UIViewController
let page_three = storyboard.instantiateViewControllerWithIdentifier("walk_3") as! UIViewController
let page_four = storyboard.instantiateViewControllerWithIdentifier("walk_4") as! UIViewController
walkthrough.delegate = self
walkthrough.addViewController(page_zero)
walkthrough.addViewController(page_one)
walkthrough.addViewController(page_two)
walkthrough.addViewController(page_three)
walkthrough.addViewController(page_four)
return walkthrough
}
我在这里使用该功能:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = showWelcomeView() // func usedhere
return true
}
应用程序 运行 没有错误。我可以看到我的自定义视图和所有 4 个子视图(walk_0 ... walk_4),我可以滑动它们但不正确:可滚动是免费的并且不会在每一页上停止。
所以...我的自定义视图错过了一些步骤?请帮助我!
这是我的 IPhone 的屏幕截图,滚动条位于 2 个子视图之间:
你连接了吗
@IBOutlet var pageControl:UIPageControl?
在 BWWalkthroughViewController 中使用视图控制器中的页面控制器?
我已经通过在 BWWalkthroughViewController
中使用滚动视图的 属性 解决了这个问题override func viewDidLoad() {
super.viewDidLoad()
..
scrollview.pagingEnabled = true
}
工作正常,但不知道为什么。该滚动视图的默认值是在 init:
中设置的pagingeEnabled = true
required init(coder aDecoder: NSCoder) {
// Setup the scrollview
scrollview = UIScrollView()
scrollview.showsHorizontalScrollIndicator = false
scrollview.showsVerticalScrollIndicator = false
scrollview.pagingEnabled = true // Default of scrollview
// Controllers as empty array
controllers = Array()
super.init(coder: aDecoder)
}
在BWWalkthroughViewController
class中添加以下函数。
override func viewDidLayoutSubviews(){
// Constraints
let metricDict = ["w":view.bounds.size.width,"h":view.bounds.size.height]
// - Generic cnst
for vc in controllers {
vc.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[view(h)]", options:[], metrics: metricDict, views: ["view":vc.view]))
vc.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[view(w)]", options:[], metrics: metricDict, views: ["view":vc.view]))
scrollview.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[view]|", options:[], metrics: nil, views: ["view":vc.view,]))
}
}
从 addViewController
函数中删除以下行
// Constraints
let metricDict = ["w":vc.view.bounds.size.width,"h":vc.view.bounds.size.height]
// - Generic cnst
vc.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[view(h)]", options:[], metrics: metricDict, views: ["view":vc.view]))
vc.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[view(w)]", options:[], metrics: metricDict, views: ["view":vc.view]))
scrollview.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[view]|", options:[], metrics: nil, views: ["view":vc.view,]))