幻灯片视图控制器
Posted
技术标签:
【中文标题】幻灯片视图控制器【英文标题】:Slide View Controller 【发布时间】:2017-10-14 13:06:59 【问题描述】:我设法以编程方式制作了一个滑动菜单控制器。我正在尝试在 tableViewController 中添加一个转换,当您单击一个标签以关闭菜单时,动画将使 tableView 全屏显示 0.2 秒,然后关闭菜单。这将有时间通过单击按钮更改视图,并且看起来不错。在 didSelectRowAtIndexPath 中做到了。有效!
tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)
因为我只在屏幕的 80% 处打开菜单,所以我正在移动单元格的 contentView 以显示在屏幕的 80% 中。当动画在 didSelectRowAtIndexPath 开始时,我将移回 0,因此我不会在 tableView 的左侧看到空格,如下所示:
tableView.contentInset = UIEdgeInsetsMake(0, menuWidthGap, 0, -menuWidthGap)
现在,当我再次单击该按钮时,它仍然是这样。当我再次单击按钮返回到 contentView 的初始状态时,我该怎么办。
这是我的表格视图:
import UIKit
class MenuLeftVC: UITableViewController
override func viewDidLoad()
super.viewDidLoad()
// Initialize the window
let window = UIWindow.init(frame: UIScreen.main.bounds)
window.makeKeyAndVisible()
view.backgroundColor = UIColor.yellow
navigationController?.isNavigationBarHidden = true
tableView.dataSource = self
tableView.delegate = self
tableView.showsVerticalScrollIndicator = false
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(true)
print("did apear")
tableView.contentInset = UIEdgeInsetsMake(0, menuWidthGap, 0, -menuWidthGap)
func selectCell()
print("selected cell - >")
NotificationCenter.default.post(name: NSNotification.Name("SelectedCell"), object: nil)
override func numberOfSections(in tableView: UITableView) -> Int
return 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 20
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
cell.contentView.reloadInputViews()
cell.isSelected = false
tableView.contentInset = UIEdgeInsetsMake(0, menuWidthGap, 0, -menuWidthGap)
cell.contentView.backgroundColor = UIColor.yellow
cell.textLabel?.text = "Daim Boy"
return cell
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let selectedCell:UITableViewCell = tableView.cellForRow(at: indexPath)!
selectedCell.contentView.backgroundColor = UIColor.red
selectedCell.isSelected = false
if selectedCell.isSelected == true
print("selection")
if selectedCell.textLabel?.text == "Daim Boy"
print("cell is selected")
UIView.animate(withDuration: 0.3, animations:
tableView.contentInset = UIEdgeInsetsMake(0, menuWidthGap, 0, -menuWidthGap)
self.selectCell()
//selectedCell.isSelected = false
)
【问题讨论】:
我不确定您是如何实现幻灯片的,但听起来您可能想要使用UICollectionView
而不是UITableView
,因为它可以免费提供滑动和过渡。
我认为你应该看看视图控制器转换。
谢谢,但这与 ViewController 动画无关。我有 2 个内容视图。其中一个拥有一个菜单,另一个拥有一个视图控制器。当我按下菜单项时,didSelectCell 被触发,并且我拥有将改变 contentView 的动画。为了更好的理解,我会放上完整的代码。
如果你能再看一下,就换个简单的家伙。
【参考方案1】:
我设法解决了这个问题:(这很简单)我只是调用 viewWillAppear,我在其中放置了代码以使布局像开头那样在函数末尾使用 DispatchQue:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let selectedCell:UITableViewCell = tableView.cellForRow(at: indexPath)!
selectedCell.contentView.backgroundColor = UIColor.red
selectedCell.isSelected = false
if selectedCell.isSelected == true
print("selection")
if selectedCell.textLabel?.text == "Daim Boy"
print("cell is selected")
UIView.animate(withDuration: 0.3, animations:
tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)
self.selectCell()
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute:
self.viewWillAppear(true)
)
//selectedCell.isSelected = false
)
并且 viewWillAppear 包含:
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(true)
print("will appear")
tableView.contentInset = UIEdgeInsetsMake(0, menuWidthGap, 0, -menuWidthGap)
【讨论】:
以上是关于幻灯片视图控制器的主要内容,如果未能解决你的问题,请参考以下文章