gpt4 book ai didi

ios - 仅使用代码(无 Segue)呈现带有自定义动画的 View Controller

转载 作者:行者123 更新时间:2023-11-30 11:07:23 25 4
gpt4 key购买 nike

这就是我想做的事情:

实现侧边导航,该导航将通过自定义动画从左到右滑入

我指的是:https://www.thorntech.com/2016/03/ios-tutorial-make-interactive-slide-menu-swift/

但是本教程和所有其他实现此功能的教程都使用 segues 来呈现 View 。

所以他们的代码在这里:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
if let destinationViewController = segue.destinationViewController as? MenuViewController {
destinationViewController.transitioningDelegate = self
}
}

但这对我来说不是一个选择!

我的整个 View Controller 都是由代码创建的。现在它是一个虚拟 View Controller ,我只是想让它从左向右滑入。

import UIKit

class SideNavVC: UIViewController {

static let sideNav = SideNavVC()

override func viewDidLoad() {
super.viewDidLoad()

let dummyView = UIView(frame: CGRect(x: 10, y: 200, width: 100, height: 100))
dummyView.backgroundColor = accentColor

view.addSubview(dummyView)

let closeBtn = UIButton(frame: CGRect(x: 4, y: 30, width: 200, height: 20))
closeBtn.addTarget(self, action: #selector(closeViewTapped), for: .touchUpInside)
closeBtn.setTitle("Close", for: .normal)

view.addSubview(closeBtn)

view.backgroundColor = confirmGreen
}

@objc func closeViewTapped(_ sender: UIButton) {
dismiss(animated: true, completion: nil)
}
}

我被困在教程的这一步:https://www.thorntech.com/2016/03/ios-tutorial-make-interactive-slide-menu-swift/#four

这就是我尝试将委托(delegate)设置为 self 的方式:

func addSlideGesture() {

let edgeSlide = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(presentSideNav))
edgeSlide.edges = .left
view.addGestureRecognizer(edgeSlide)
}

@objc func presentSideNav() {

if presentedViewController != SideNavVC.sideNav {
SideNavVC.sideNav.transitioningDelegate = self
SideNavVC.sideNav.modalPresentationStyle = .custom
self.present(SideNavVC.sideNav, animated: true, completion: nil)
}
}

这是我实现委托(delegate)的地方(MainVC 是用户向右滑动的地方)

extension MainVC: UIViewControllerTransitioningDelegate {
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {

print("Source: \(source)")
print("Destination \(presenting)")

if source == self && presenting == SideNavVC.sideNav {
print("PRESENTING SIDE NAV")
return RevealSideNav()
}

return nil
}

func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
//Added a break point here. It is hitting.
return nil
}

}

由于我的代表没有调用,我决定添加 presentationController(forPresented,presenting,source) 并在其中放置一个断点。所以我怀疑我遗漏了需要放入其中的代码的某些部分。

当我用谷歌搜索时,我发现了这个 UIPresentationController 教程 https://www.raywenderlich.com/915-uipresentationcontroller-tutorial-getting-started

但是当我经历它时,它开始让我越来越困惑。

我确信我遗漏了一些小部分。因为如果它在 delegte 设置为准备转场时有效,那么它在调用 present(_,animated,completion)

时也应该有效

有人能指出我正确的方向吗?如何获取要触发的自定义动画和要调用的委托(delegate)方法?有谁知道一个教程,教如何仅使用代码而不使用 Storyboard来做到这一点?

最佳答案

我引用了@Womble 的回答

"UIViewControllerTransitioningDelegate method not called in iOS 7 "

事实证明我使用的方法是错误的,并且 Xcode 没有对此发出警告。有点奇怪。

 func animationController(forPresented presented: UIViewController,
presenting: UIViewController,
source: UIViewController)
-> UIViewControllerAnimatedTransitioning?
{
print("Source: \(source)")
print("Destination \(presenting)")
// ... return your cached controller object here.
return RevealSideNav()
}

关于ios - 仅使用代码(无 Segue)呈现带有自定义动画的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52562132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com