Swift - 选定按钮下的水平条
问题描述:
我想在菜单上的选定按钮下添加一个白色水平条。就像YouTube应用程序一样。 This is my menuSwift - 选定按钮下的水平条
我搜索的信息,但我无法找到这事。这是我的代码。谢谢
import UIKit
class TabViewController: UIViewController {
@IBOutlet var contentView: UIView!
@IBOutlet var buttons: [UIButton]!
var rifleViewController: UIViewController!
var pistolViewController: UIViewController!
var shotgunViewController: UIViewController!
var smgsViewController: UIViewController!
var sniperViewController: UIViewController!
var viewControllers: [UIViewController]!
var selectedIndex: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
rifleViewController = storyboard.instantiateViewController(withIdentifier: "rifles")
sniperViewController = storyboard.instantiateViewController(withIdentifier: "snipers")
smgsViewController = storyboard.instantiateViewController(withIdentifier: "smgss")
shotgunViewController = storyboard.instantiateViewController(withIdentifier: "shotguns")
pistolViewController = storyboard.instantiateViewController(withIdentifier: "pistols")
viewControllers = [rifleViewController,
pistolViewController,
shotgunViewController,
smgsViewController,
sniperViewController]
buttons[selectedIndex].isSelected = true
didPressTab(buttons[selectedIndex])
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func didPressTab(_ sender: UIButton) {
let previousIndex = selectedIndex
selectedIndex = sender.tag
buttons[previousIndex].isSelected = false
let previousVC = viewControllers[previousIndex]
previousVC.willMove(toParentViewController: nil)
previousVC.view.removeFromSuperview()
previousVC.removeFromParentViewController()
sender.isSelected = true
let vc = viewControllers[selectedIndex]
addChildViewController(vc)
vc.view.frame = contentView.bounds
contentView.addSubview(vc.view)
vc.didMove(toParentViewController: self)
}
}
答
你可以用简单的动画来实现这一点。 在我的示例 - 应用程序中,我在故事板的屏幕顶部添加了一个视图,并在其上放置了四个按钮。然后我将按钮连接到名为“buttonTapped”的函数(重要的是:你需要在这里包含发件人)。 代码相当简单:
class ViewController: UIViewController {
@IBOutlet weak var backgroundView: UIView!
var movingView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
let screenWidth = UIScreen.main.bounds.width
movingView = UIView(frame: CGRect(x: 0, y: 55, width: screenWidth/4, height: 5))
movingView.backgroundColor = UIColor.white //if backgroundView's color is black
backgroundView.addSubview(movingView)
}
@IBAction func buttonTapped(_ sender: UIButton)
{
let newx = sender.frame.origin.x
UIView.animate(withDuration: 1) {
self.movingView.frame.origin.x = newx
}
}
}
不,这是一个普通的UIView黑色背景。我把按钮放在这个视图里面。 – Jordan
非常感谢!我做到了,看起来很棒! –
是的,我明白了。对于那个很抱歉。这是一个愚蠢的问题:) –