swift 自定义TabBarItem

1.效果图

   

2.NewsViewController.swift

//
//  NewsViewController.swift
//  NavigationDemo
//
//  Created by 赵超 on 14-6-27.
//  Copyright (c) 2014年 赵超. All rights reserved.
//

import UIKit

class NewsViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor=UIColor.blueColor()
        self.title="新闻"
    }
}

3.MoviewViewController.swift

//
//  MovieViewController.swift
//  NavigationDemo
//
//  Created by 赵超 on 14-6-27.
//  Copyright (c) 2014年 赵超. All rights reserved.
//

import UIKit

class MovieViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor=UIColor.redColor()
        self.title="电影"
    }
}

4.AppDelegate.swift

//
//  AppDelegate.swift
//  NavigationDemo
//
//  Created by 赵超 on 14-6-27.
//  Copyright (c) 2014年 赵超. All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        // Override point for customization after application launch.
        self.window!.backgroundColor = UIColor.whiteColor()
        self.window!.makeKeyAndVisible()
        //设置根控制器
        var root=RootViewController()
        self.window!.rootViewController=root
        return true
    }

    func applicationWillResignActive(application: UIApplication) {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
    }

    func applicationDidEnterBackground(application: UIApplication) {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }

    func applicationWillEnterForeground(application: UIApplication) {
        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    }

    func applicationDidBecomeActive(application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }

    func applicationWillTerminate(application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }

}

5.RootViewController.swift

//
//  RootViewController.swift
//  NavigationDemo
//
//  Created by 赵超 on 14-6-27.
//  Copyright (c) 2014年 赵超. All rights reserved.
//å

import UIKit

class RootViewController: UITabBarController {

    var tabBarBgImg:UIImageView?
    var tabBarBgImgSelected:UIImageView?

    override func viewDidLoad() {
        super.viewDidLoad()
        //隐藏自带tabBarItem
        self.tabBar.hidden=true
        customTabBar()
        loadViewController()
    }
    //选择视图
    func test(tap:UITapGestureRecognizer){
        var view=tap.view
        var index=view.tag as Int
        var z=(index)*57
        var c=CGFloat(z)
        var x:CGFloat=5.0 + c
        var y=tabBarBgImg!.frame.size.height/2-45/2
        UIView.beginAnimations("test",context:nil)
        tabBarBgImgSelected!.frame = CGRectMake(x ,y, 50, 45)
        UIView.commitAnimations()
        //跳转页面
        self.selectedIndex=view.tag

    }

    //自定义tabBar视图
    func customTabBar(){

        var height=UIScreen.mainScreen().bounds.size.height
        var width=UIScreen.mainScreen().bounds.size.width
        var tabW=width
        var tabH=height-49
        tabBarBgImg=UIImageView(frame:CGRectMake(0,tabH,tabW,49))
        //打开事件
        tabBarBgImg!.userInteractionEnabled=true
        tabBarBgImg!.image=UIImage(named:"tab_bg_all")

        //选中背影图片
        var y=tabBarBgImg!.frame.size.height/2-45/2
        tabBarBgImgSelected=UIImageView(frame:CGRectMake(5,y, 50, 45))
        tabBarBgImgSelected!.image=UIImage(named:"selectTabbar_bg_all1")
        tabBarBgImg!.addSubview(tabBarBgImgSelected)

        var x:CGFloat=0
        var images=["icon_cinema","msg_new"]
        var titles=["电影","新闻"]
        var titleFont=UIFont.systemFontOfSize(12)
        for  index in 0..2{
            var imgView=UIImageView(frame:CGRectMake( x+18, y+5, 22, 22))
            //添加事件
            imgView.userInteractionEnabled=true
            imgView.tag=index
            var tap=UITapGestureRecognizer(target:self,action:Selector("test:"))
            imgView.addGestureRecognizer(tap)

            imgView.image = UIImage(named:images[index])
            tabBarBgImg!.addSubview(imgView)
            var title=UILabel(frame:CGRectMake(x+16,y+26,45,15))
            title.text=titles[index]
            title.font=titleFont
            title.textColor = UIColor.whiteColor()
            tabBarBgImg!.addSubview(title)
            x+=57
        }
        self.view.addSubview(tabBarBgImg)

    }

    //加载子视图控制器
    func loadViewController(){
        //USA
        var movie=MovieViewController()
        var  movieItem=UITabBarItem(tabBarSystemItem: .Favorites,tag:1)
        movie.tabBarItem=movieItem
        var movieNav=UINavigationController(rootViewController:movie)
        //News
        var news=NewsViewController()
        var  newsItem=UITabBarItem(tabBarSystemItem: .Favorites,tag:2)
        news.tabBarItem=newsItem
        var newsNav=UINavigationController(rootViewController:news)

        //数组
        var ctrls=[movieNav,newsNav]
        //添加
        self.setViewControllers(ctrls,animated:true)
    }

}

完整代码:https://github.com/whzhaochao/CustomTabBarItem

swift 自定义TabBarItem

时间: 2024-12-05 04:22:34

swift 自定义TabBarItem的相关文章

[IOS]swift自定义uicollectionviewcell

刚刚接触swift以及ios,不是很理解有的逻辑,导致某些问题.这里分享一下swift自定义uicollectionviewcell 首先我的viewcontroller不是直接继承uicollectionviewcontroller,而是添加的uicollectionview到我的storyboard, 然后再新建一个swift的文件,让这个swift继承uicollectionviewcell import Foundation class SVGCell :UICollectionView

Swift开发教程--如何自定义TabBarItem的图片显示

在做项目的时候,如果使用系统的UITabBarController的时候,底部的tab自定义图片显示是蓝色和灰色的,这不是我们所想要的效果. 如果想显示自定义的按下和弹起的图片效果,这个时候就需要对TabBarItem进行修改. 以下就是具体的示例: var itemNameArray:[String] = ["down_32","add_32","plane_32","circle_32"] var itemNameSele

swift 自定义弹框

// //  ViewController.swift //  animationAlert // //  Created by su on 15/12/9. //  Copyright © 2015年 tian. All rights reserved. // import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //灰色的遮挡板 let o

Swift:自定义Response

//调用的方法 func refresh(){ //如果有上拉加载更多 正在执行,则取消它 if self.tableView.mj_footer.isRefreshing() { self.tableView.mj_footer.endRefreshing() } //根据 tab name 获取帖子列表 TopicListModel.getTopicList(tab){ //自定义的Response (response:V2ValueResponse<[TopicListModel]>)

Swift - 自定义单元格实现微信聊天界面

1,下面是一个放微信聊天界面的消息展示列表,实现的功能有: (1)消息可以是文本消息也可以是图片消息 (2)消息背景为气泡状图片,同时消息气泡可根据内容自适应大小 (3)每条消息旁边有头像,在左边表示发送方,在右边表示接收方 2,实现思路 (1)需要定义一个数据结构保存消息内容 MessageItem (2)继承UITableViewCell实现自定义单元格,这里面放入头像和消息体 (3)继承UITableView实现自定义表格,通过读取数据源,进行页面的渲染 (4)消息体根据内容类型不同,用不

Swift 自定义Subscript

Swift可以方便给自定义类加下标,其中参数和返回值可以在类里定义为任意类型: subscript(parameters) -> ReturnType { get { //return someValue } set (newValue) { //setSomeValue() } }/* 何问起 hovertree.com */ 下标通常是访问某些方法的快捷方式,就算对NSArray操作的时候一样. 和计算属性一样,下标也能以只读或只写的方式出现,如只读下标: subscript(paramet

swift自定义转场动画(比较有难度)

一 转场效果图和采用转场方式 1 转场效果图 : 2 采用方式 (方法): --> 2.1 自定义转场动画 --> 2.2 协议 二 转场实现需要获取的东西 1 获取转场前图片的frame 2 设置一张临时imageView作为转场图片(图片并不是真实存在的) 3 获取图片放大展示的frame 三 转场图解 四 转场动画思想 1 通过在实现转场动画的类中定义协议方法,定义代理属性,明确谁可以提供需要的frame和imageView,将对方设置为代理,让代理提供需求,达到转场目的. 2 明确代码

自定义tabBarItem选中和未选中的显示效果

以下代码是在TabBarViewController的ViewControllers的其中一个ViewController的viewDidLoad中写的!!! UIImage *image = [UIImage imageNamed:@"Heart"]; //item未选中状态时,image不使用tintColor的颜色 image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; //添加tabb

Swift 自定义UIView的点击穿透

早上写自定义View的时候,发现一个神奇的问题,因为真的比较神奇,所以就记录下 一般我们自定义View的时候喜欢这样写: override init(frame: CGRect) { super.init(frame:frame) //添加其他views self.addSubview(view1) } 这样的方式,创建出的View是不会有穿透点击效果的 然而,有一个绘制图形的接口是: override func drawRect(rect: CGRect) { //添加其他Views self