gpt4 book ai didi

ios - 如何以编程方式创建具有自定义选项卡栏形状的自定义选项卡栏 Controller

转载 作者:行者123 更新时间:2023-11-29 05:56:50 26 4
gpt4 key购买 nike

我正在尝试完全用代码创建我的 iOS 移动应用程序。这样做会导致具有自定义选项卡栏形状的自定义选项卡栏 Controller 出现问题。

My custom tab bar shape looks something along the lines of this

AppDelegate.swift:

func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

window = UIWindow()
window.rootViewController = CustomTabBarController()
window?.makeKeyAndVisible()
return true
}

在我的自定义 TabBarController 中:

import UIKit

class CustomTabBarController: UITabBarController {

override func viewDidLoad() {
super.viewDidLoad()
setupCenterButton()
}

func setupCenterButton() {
let menuButton = UIButton(frame: CGRect(x: 0, y: 0, width: 64, height: 64))

var menuButtonFrame = menuButton.frame
menuButtonFrame.origin.y = view.bounds.height - menuButtonFrame.height - 48
menuButtonFrame.origin.x = view.bounds.width/2 - menuButtonFrame.size.width/2
menuButton.frame = menuButtonFrame
menuButton.clipsToBounds = true
menuButton.layer.cornerRadius = menuButtonFrame.height/2
view.addSubview(menuButton)
}


}


extension UITabBar {

open override func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: size.width, height: 64)
}
}

还有我的自定义标签栏形状

import UIKit

class CustomizedTabBar: UITabBar {

private var shapeLayer: CALayer?

private func addShape() {
let shapeLayer = CAShapeLayer()
shapeLayer.path = createPath()

if let oldShapeLayer = self.shapeLayer {
self.layer.replaceSublayer(oldShapeLayer, with: shapeLayer)
} else {
self.layer.insertSublayer(shapeLayer, at: 0)
}

self.shapeLayer = shapeLayer
}

func createPath() -> CGPath {
let path = UIBezierPath()

path.move(to: CGPoint(x: 0, y: 0))
//..path moving around..
path.close()

return path.cgPath
}

override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
//..stuff
}

override func draw(_ rect: CGRect) {
self.addShape()
}

func createBezierPath() -> UIBezierPath {

//..creating a path
}

我该如何解决这个问题?使用当前的代码设置,我的选项卡栏就像普通的选项卡栏一样......而不是我的自定义形状 see here

并且我尝试覆盖 UITabBarController 中的选项卡栏属性以返回 CustomizedBarBar 类的实例,但没有成功。任何帮助将不胜感激!

最佳答案

如果您使用 Storyboard,那么使用自定义选项卡栏就很简单。

  1. 创建自定义 UITabBar 子类。
  2. 将标签栏 Controller 拖到 Storyboard 上。
  3. 在 Storyboard中选择标签栏对象,单击“身份检查器”,然后将标签栏的类更改为您的自定义标签栏类。

关于ios - 如何以编程方式创建具有自定义选项卡栏形状的自定义选项卡栏 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55072940/

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