先上效果图:

这个程序分2个层次,一个是顶部的带UITextField的bar,一个是下拉选择的view,下拉选择的view带有4个自己定义的UIView

我们先定义一个UIViewController叫MyViewController,然后顶部的bar叫TopBarView,下拉选择的view叫TypeSelectView。像UIButton的自己定义的view叫做TypeView

TypeView有两种状态,假设手指触摸到的item就是选中状态。所以TypeSelectView应该有个属性表示当前是哪个view被选中了,TypeView中有个属性叫做自己是否被选中

由于下拉框有收起和展示两种状态。所以TypeSelectedView有个属性表示自己如今在哪种状态

先来写TypeView:

#define TypeView_Width 76
#define TypeView_Height 76 @class TypeSelectView;
@interface TypeView : UIView
@property (nonatomic, assign) int typeId;
@property (nonatomic, assign) BOOL bSelected;
@property (nonatomic,strong) TypeSelectView *typesView;
@end

touch事件:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
if (!_bSelected) {//假设触摸到的这项没被选中。那么我们就要把TypeSelectView中的当前选中项的选中状态取消
if (_typesView.curSelectedView) {
_typesView.curSelectedView.bSelected = NO;
[_typesView.curSelectedView setNeedsDisplay];
}
_bSelected = YES;
_typesView.curSelectedView = self;
[self setNeedsDisplay]; }
}

然后是draw:

- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [CCommon RGBColorFromHexString:@"#c5c4cc" alpha:1.0f].CGColor);
CGFontRef contextFont = CGFontCreateWithFontName((CFStringRef)[UIFont systemFontOfSize:14].fontName);
CGContextSetFont(context, contextFont); CFRelease(contextFont);
CGContextSetFontSize(context, 14.0); if (_bSelected) {
//显示select的背景
UIImage* bgImage = [UIImage imageNamed:@"change_icon_touch_bg.png"];
CGRect bgRc = rect;
bgRc.origin.x = (bgRc.size.width - bgImage.size.width)/2+1.0f; //找到背景图image的左上角的x坐标
bgRc.origin.y = (bgRc.size.height - bgImage.size.height)/2; <span style="font-family: Arial, Helvetica, sans-serif;">//找到背景图image的左上角的y坐标</span> bgRc.size = bgImage.size; //ui给的背景图的大小作为控件的大小
[bgImage drawInRect:bgRc]; CGContextSetFillColorWithColor(context, [CCommon RGBColorFromHexString:@"#58baff" alpha:1.0f].CGColor); //中间填充颜色
} //draw image
NSString* imageName = [NSString string];
NSString* text = [NSString string]; imageName = @"mbWWW.png";
if (_typeId == 0) {
text = @"web";
}else if(_typeId == 1){
text = @"weibo";
}else if(_typeId == 2) {
text = @"sina";
}else if(_typeId == 3){
text = @"sohu";
} if (_bSelected) {
imageName = [imageName stringByReplacingOccurrencesOfString:@".png" withString:@"_touch.png"];
}
//imageName给的view里面的src image的名称,有选中和没选中两种状态
UIImage* typeImage = [UIImage imageNamed:imageName];
CGRect rc = rect;
rc.origin.x = (rc.size.width - typeImage.size.width) / 2;
rc.origin.y = 10;
rc.size = typeImage.size;
[typeImage drawInRect:rc]; //draw text 由于文字在image以下
CGPoint textPt = CGPointMake(rc.origin.x, rc.origin.y+rc.size.height+10); [text drawAtPoint:textPt withFont:[UIFont systemFontOfSize:14.0f]];
}

代码能够在http://download.csdn.net/detail/baidu_nod/7644329下载

IOS的一个带动画的多项选择的控件(一)的更多相关文章

  1. 一个带动画效果的颜色选择对话框控件AnimatedColorPickerDialog

    android4.4的日历中选择日程显示颜色的时候有一个颜色选择对话框非常漂亮,模仿他的界面我实现了一个类似的对话框,而且带有动画效果. 代码的实现可讲的地方不多,主要是采用了和AlertDialog ...

  2. 收藏一个带动画效果的ScrollViewer以及ScrollBar的模板

    这里介绍一个带动画效果的ScrollViewer和ScrollBar,总共分为两个资源字典,直接拿来引用即可: 1 ScrollBarStyle.xaml <ResourceDictionary ...

  3. 学习方法和阶段介绍 、 iOS界面开发引入 、 构造第一个App 、 视图控制器和视图 、 控件与事件 、 InterfaceBuilder

    1 创建并运行第一个App 1.1 问题 使用Xcode创建一个App项目,该应用实现功能在界面上显示Hello World标签,在模拟器中的运行结果如图-1所示: 图-1 1.2 方案 分析图-1, ...

  4. iOS开发——UI进阶篇(十九)UISearchBar控件简介

    最近用到搜索功能.总结一下 搜索,无疑可以使用UISearchBar控件! 那就先了解一下UISearchBar控件吧! UISearchBar控件就是要为你完成搜索功能的一个专用控件.它集成了很多你 ...

  5. iOS系列 基础篇 09 开关、滑块和分段控件

    iOS系列 基础篇 09 开关.滑块和分段控件 目录: 案例说明 开关控件Switch 滑块控件Slider 分段控件Segmented Control 1. 案例说明 开关控件(Switch).滑块 ...

  6. 动画--android图片点击放大动画,并遮挡旁边的控件

    http://blog.csdn.net/s13488941815/article/details/40649823: 首先是点击放大可以使用android自带的缩放动画,因为要遮盖其他控件,就需要控 ...

  7. TSQLDBServerHttpApi一个使用HTTPS.SYS内核的数据库服务端控件

    TSQLDBServerHttpApi一个使用HTTPS.SYS内核的数据库服务端控件 在WINDOWS操作系统,TSQLDBServerHttpApi使用HTTPS.SYS作为通信内核,而HTTPS ...

  8. Android TV开发总结(七)构建一个TV app中的剧集列表控件

    原文:Android TV开发总结(七)构建一个TV app中的剧集列表控件 版权声明:我已委托"维权骑士"(rightknights.com)为我的文章进行维权行动.转载务必转载 ...

  9. iOS简易柱状图(带动画)--新手入门篇

    叨逼叨 好久没更新博客了,才几个月,发生了好多事情,处理了好多事情.不变的是写代码依然在继续. 做点啥子 看看objective-c的书,学着写了个柱状图,只是练习的demo而已,iOS上的图表控件已 ...

随机推荐

  1. Android RatingBar自定义替换系统图片

    1.自定义替换提醒☆图片,准备两个图片添加到系统中去:如下:        在drewable下定义一个图片资源ratingbar_drawable.xml 1 2 3 4 5 6 7 8 9 10 ...

  2. Android设置里面默认存储器选项(default write disk)的实现

    原生的Android设置里面没有默认存储器的选项,可是MTK偏偏加上了这个功能,可能MTK认为这个比較实用吧,所以,他们在原生的基础上面做了改动.加上了这个功能.可是高通平台没有这个功能.相对MTK来 ...

  3. Mac下如何不借助第三方工具实现NTFS分区的可写挂载

    问题背景 我想很多使用Mac的同学都会遇到读写NTFS磁盘的问题,因为默认情况下Mac OSX对NTFS磁盘的挂载方式是只读(read-only)的,因此把一个NTFS格式的磁盘插入到Mac上,是只能 ...

  4. 关于JS历史拓展

      js由来        95年那时,绝大多数因特网用户都使用速度仅为28.8kbit/s 的“猫”(调制解调器)上网,但网页的大小和复杂性却不断增加.为完成简单的表单验证而频繁地与服务器交换数据只 ...

  5. 基于Spring MVC的简单HelloWorld实例

    1.导包 2.web.xml文件配置 3.包结构定义以及控制器的编写 4.xxxx-servlet文件配置 5.返回的视图(jsp)编写   6.源码 下载:http://download.csdn. ...

  6. sqlserver中的锁与事务

    以下内容整理自: SQL Server中的锁 SQLSERVER中的元数据锁 SQLSERVER中的锁资源类型 浅谈sqlserver中的事务和锁 锁的分类 1.从数据库角度 独占锁(排它锁 X) 独 ...

  7. IE6不能用class命名!IE6不能用class命名!IE6不能用class命名! 重要的事情说3遍

    IE6不能用class命名!IE6不能用class命名!IE6不能用class命名!  重要的事情说3遍

  8. oracle获得每周,每月,每季度,每年的第一天

    当前年月日 SELECT trunc(sysdate) , trunc(sysdate,'dd') FROM dual   当年第一天 SELECT trunc(sysdate,'yyyy') FRO ...

  9. java线层的启动与停止

    class Do8 { public static void main(String[] args) { Resource r =new Resource(); Input in =new Input ...

  10. (原)ubuntu14.04中安装gcc4.9和g++4.9

    http://stackoverflow.com/questions/28683747/installing-gcc4-9-on-ubuntu-14-04-lts http://askubuntu.c ...