配色: 字号:
Swift自定义iOS中的TabBarController并为其添加动画
2016-11-11 | 阅:  转:  |  分享 
  
Swift自定义iOS中的TabBarController并为其添加动画

这篇文章主要介绍了Swift自定义iOS中的TabBarController并为其添加动画的方法,即自定义TabBarController中的的TabBar并为自定义的TabBar增加动画效果,需要的朋友可以参考下

自定义TabBarController有时候默认的TabBarController不能满足我们的开发需求,比如你想用彩色的图标,系统却只调用图标的轮廓,所以我们需要自己定义一下TabBar。

方法一:修改TabBarController中的TabBar新建CustomTabBarController类继承自UITabBarController,并在Storyboard中设置:



首先自定义tabBar的背景,在viewDidLoad()方法中添加:

复制代码代码如下:

//用图片self.tabBar.backgroundImage=UIImage(named:"TabBarBG")//或//直接用颜色self.tabBar.barTintColor=UIColor.blackColor()

然后修改每个子ViewController中的TabBarItem,在viewDidLoad()方法中继续添加:

复制代码代码如下:

for(index,viewController)inself.viewControllers!.enumerate(){//声明TabBarItem的Image,如果没有imageWithRenderingMode方法Image只会保留轮廓letimage=UIImage(named:"TabBar\(index)")?.imageWithRenderingMode(.AlwaysOriginal)letselectedImage=UIImage(named:"TabBar\(index)Sel")?.imageWithRenderingMode(.AlwaysOriginal)

//声明新的无标题TabBarItemlettabBarItem=UITabBarItem(title:nil,image:image,selectedImage:selectedImage)//设置tabBarItem的imageInsets可以使图标居中显示tabBarItem.imageInsets=UIEdgeInsetsMake(6,0,-6,0)

viewController.tabBarItem=tabBarItem}

完成!效果如下所示:





方法二:自定义TabBar上述方法唯一的问题是,当你想设置item的选定背景时:

复制代码代码如下:

self.tabBar.selectionIndicatorImage=UIImage(named:"TabBarBGSel")

背景图不能铺满整个item,两边会有空隙(如果大家有更好的方法解决可以留言,谢谢),如图:



这个时候需要自定义TabBar,首先声明一个UIButton用来记录当前选中的Button:

复制代码代码如下:

varselectButton:UIButton!

在viewDidLoad()方法的底部加入以下代码:

复制代码代码如下:

//先记录下Controller自带的tabBar的frameletrect=self.tabBar.frame//移除Controller自带的TabBarself.tabBar.removeFromSuperview(www.visa158.com)

//用记录下的frame建立一个UIViewletmyView=UIView(frame:rect)//设置这个View的背景色myView.backgroundColor=UIColor(patternImage:UIImage(named:"TabBarBG")!)self.view.addSubview(myView)

forvari=0;i
letbutton=UIButton()

//根据子ViewController的个数计算Button的宽度letwidth=myView.frame.size.width/CGFloat(self.viewControllers!.count)letx=CGFloat(i)widthbutton.frame=CGRectMake(x,0,width,myView.frame.www.hunanwang.netsize.height)

//设置Button未选中时候的图标letimage=UIImage(named:"TabBar\(i)")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)button.setImage(image,forState:UIControlState.Normal)

//设置Button选中时候的图标,注意这里Button的状态是Selected,而不是HighlightedletselImage=UIImage(named:"TabBar\(i)Sel")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)button.setImage(selImage,forState:UIControlState.Selected)

//设置Button未选中和选中时候的背景图button.setBackgroundImage(UIImage(named:"TabBarBG"),forState:UIControlState.Normal)button.setBackgroundImage(UIImage(named:"TabBarBGSel"),forState:UIControlState.Selected)

//去掉UIButton自带的高光效果button.adjustsImageWhenHighlighted=false

myView.addSubview(button)

//设置UIButton的标记button.tag=i

button.addTarget(self,action:"onClick:",forControlEvents:UIControlEvents.TouchUpInside)

//设置默认的选中项ifi==0{button.selected=trueself.selectButton=button}}/自定义Button的点击事件

:param:button/funconClick(button:UIButton){//将上个选中按钮设置为未选中self.selectButton.selected=false//当前按钮设置为选中button.selected=true//记录选中按钮self.selectButton=button

//通过UITabBarController的selectedIndex属性设置选中了哪个UIViewControllerself.selectedIndex=button.tag}

最终效果如下:



给自定义TabBarController添加动画如何自定义TabBarController我们在上面已经讲过,现在为自定义的TabBar增加动画效果。

直接上代码:

复制代码代码如下:

//用来记录当前选中按钮privatevarcurrentSelectedButton=UIButton()//用来指示选中的背景privatevarselectionIndicatorImageView:UIImageView!//单个item的宽度privatevaritemWidth:CGFloat!在viewDidLoad()方法中加入以下代码:

overridefuncviewDidLoad(){super.viewDidLoad()

//记录TabBarController自带TabBar的位置letrect=self.tabBar.frame//移除TabBarController自带的TabBarself.tabBar.removeFromSuperview()

//自定义TabBar的背景letbackgroundView=UIView(frame:rect)backgroundView.backgroundColor=UIColor(patternImage:UIImage(named:"TabBarBG")!)

self.view.addSubview(backgroundView)

itemWidth=backgroundView.frame.size.width/CGFloat(self.viewControllers!.count)

selectionIndicatorImageView=UIImageView(frame:CGRectMake(0,0,itemWidth,backgroundView.frame.size.height))selectionIndicatorImageView.image=UIImage(named:"TabBarBGSel")

backgroundView.addSubview(selectionIndicatorImageView)

forvari=0;i
letbutton=CGMTabBarButton(frame:CGRectMake(itemWidthCGFloat(i),0,itemWidth,backgroundView.frame.size.height))

letimage=UIImage(named:"TabBar\(i)")!letselImage=UIImage(named:"TabBar\(i)Sel")!

button.setImage(image,forState:UIControlState.Normal)button.setImage(selImage,forState:UIControlState.Selected)

button.addTarget(self,action:"onClick:",forControlEvents:UIControlEvents.TouchUpInside)

button.tag=i

//去掉buttond的高光效果button.adjustsImageWhenHighlighted=false

backgroundView.addSubview(button)}}

添加onClick方法,动画效果也在这里面实现:

复制代码代码如下:

funconClick(button:UIButton){//将上个选中俺就设置为为选中self.currentSelectedButton.selected=false//当前按钮设置为选中button.selected=true

self.currentSelectedButton=button

letx=CGFloat(button.tag)+0.5

//为TabBarItem的背景添加动画UIView.animateWithDuration(0.4,delay:0.0,usingSpringWithDamping:0.7,initialSpringVelocity:10.0,options:UIViewAnimationOptions.CurveEaseInOut,animations:{()->Voidin

self.selectionIndicatorImageView.center.x=self.itemWidthx

},completion:nil)

self.selectedIndex=button.tag}

最终效果如下:

























献花(0)
+1
(本文系白狐一梦首藏)