- 浏览: 162217 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
xxdxuxiangdong:
org.springframework.security.ui ...
spring-security 帮助文档中整理出来的简单记录摘要 -
许傻子:
怎么看不到东西哦
一个javascript的格式化工具 -
zouwu85:
根本就不行
java 屏幕录制 -
mislay:
pixelmator
iPhone 突然发现,setting配置文件中的DefaultValue可能拿不了值 -
sharewind:
请教一下你这截图用的工具是啥来着
iPhone 突然发现,setting配置文件中的DefaultValue可能拿不了值
最开始, 是想利用toolBar来着,可惜好多原因(忘了?好像是图片要自动给你光化,如果利用custom button也有这些那些的问题, 还有就是间距什么的, 位置也不好算).
最终, 利用普通button + UIView + UIScrollView实现了个. 另外还悲剧的发现, 好像按钮没有长按时的那种事件..也是利用Timer自己搞.
@interface ScrollToolBar2 : UIView<UIScrollViewDelegate> { UIScrollView *buttonView; UIButton *leftButton; UIButton *rightButton; UIButton *selectedButton; int isTouchHold; NSTimer *timer; } - (id)initWithFrame:(CGRect)frame defaultClickButtonPosition:(int)pos images:(UIImage *)firstImg, ...; @end
#import "ScrollToolBar2.h" #define BUTTON_LEFT_SPACE 10 #define BUTTON_RIGHT_SPACE 10 #define BUTTON_ITEM_SPACE 10 #define BUTTON_MOVE_SPACE 6 @implementation ScrollToolBar2 void switchBtnState(UIButton *button) { UIImage *imgA = [button imageForState:UIControlStateNormal]; UIImage *imgB = [button imageForState:UIControlStateHighlighted]; [imgA retain]; [imgB retain]; [button setImage:imgB forState:UIControlStateNormal]; [button setImage:imgA forState:UIControlStateHighlighted]; [imgA release]; [imgB release]; } - (void) toggle:(UIButton *) button { if (selectedButton == button) { return; } if (selectedButton) { switchBtnState(selectedButton); } selectedButton = button; switchBtnState(button); float width = buttonView.frame.size.width; CGRect rect = button.frame; float offsetCenter = buttonView.contentOffset.x + width / 2; if((rect.origin.x + rect.size.width / 2) < offsetCenter) { // button in left float offset = rect.origin.x - (offsetCenter - rect.size.width / 2); CGPoint contentOffset = buttonView.contentOffset; contentOffset.x = contentOffset.x + offset; contentOffset.x = contentOffset.x < 0 ? 0 : contentOffset.x; [buttonView setContentOffset:contentOffset animated:YES]; } else { //button in right float offset = rect.origin.x - (offsetCenter - rect.size.width / 2); CGPoint contentOffset = buttonView.contentOffset; contentOffset.x = contentOffset.x + offset; contentOffset.x = contentOffset.x > (buttonView.contentSize.width - width) ? (buttonView.contentSize.width - width) : contentOffset.x; [buttonView setContentOffset:contentOffset animated:YES]; } } - (id)initWithFrame:(CGRect)frame defaultClickButtonPosition:(int)pos images:(UIImage *)firstImg, ... { if ((self = [super initWithFrame:frame])) { UIButton *defaultClickBtn = nil; isTouchHold = 0; int i = 0; float totalWidth = BUTTON_LEFT_SPACE; va_list params; va_start(params, firstImg); UIImage *now = va_arg(params,UIImage *); UIImage *prev = firstImg; NSMutableArray *buttons = [[NSMutableArray alloc] init]; while(firstImg) { UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setImage:prev forState:UIControlStateNormal]; [button setImage:now forState:UIControlStateHighlighted]; [button addTarget:self action:@selector(toggle:) forControlEvents:UIControlEventTouchDown]; button.frame = CGRectMake(totalWidth, 0, prev.size.width, prev.size.height); button.tag = i; if (i == pos) { defaultClickBtn = button; [defaultClickBtn retain]; } totalWidth += prev.size.width + BUTTON_ITEM_SPACE; [buttons addObject:button]; i++; prev = va_arg(params,UIImage *); if(prev == nil) { break; } now = va_arg(params,UIImage *); } totalWidth = totalWidth - BUTTON_ITEM_SPACE + BUTTON_RIGHT_SPACE; buttonView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, frame.size.width, frame.size.height)]; buttonView.pagingEnabled = NO; buttonView.contentSize = CGSizeMake(totalWidth, frame.size.height); buttonView.showsHorizontalScrollIndicator = NO; buttonView.showsVerticalScrollIndicator = NO; buttonView.scrollsToTop = NO; for(id btn in buttons) { [buttonView addSubview:btn]; } UIImage *leftBtnImg = [UIImage imageNamed:@"submenu_left"]; leftButton = [UIButton buttonWithType:UIButtonTypeCustom]; leftButton.frame = CGRectMake(0.0, 0.0, leftBtnImg.size.width, leftBtnImg.size.height); [leftButton setImage:leftBtnImg forState:UIControlStateNormal]; [leftButton retain]; [leftButton addTarget:self action:@selector(offsetButtonTouchBegin:) forControlEvents:UIControlEventTouchDown]; [leftButton addTarget:self action:@selector(offsetButtonTouchEnd:) forControlEvents:UIControlEventTouchUpInside]; [leftButton addTarget:self action:@selector(offsetButtonTouchEnd:) forControlEvents:UIControlEventTouchUpOutside]; UIImage *rightBtnImg = [UIImage imageNamed:@"submenu_right"]; rightButton = [UIButton buttonWithType:UIButtonTypeCustom]; rightButton.frame = CGRectMake(frame.size.width - rightBtnImg.size.width, 0.0, rightBtnImg.size.width, rightBtnImg.size.height); [rightButton setImage:rightBtnImg forState:UIControlStateNormal]; [rightButton retain]; [rightButton addTarget:self action:@selector(offsetButtonTouchBegin:) forControlEvents:UIControlEventTouchDown]; [rightButton addTarget:self action:@selector(offsetButtonTouchEnd:) forControlEvents:UIControlEventTouchUpInside]; [rightButton addTarget:self action:@selector(offsetButtonTouchEnd:) forControlEvents:UIControlEventTouchUpOutside]; UIImage *submenuBGImg = [UIImage imageNamed:@"submenu.png"]; UIImageView *backgroundImg = [[UIImageView alloc] initWithImage:submenuBGImg]; [self addSubview:backgroundImg]; [self addSubview:buttonView]; [self addSubview:leftButton]; [self addSubview:rightButton]; [self scrollViewDidEndDecelerating:buttonView ]; [buttonView setDelegate:self]; [backgroundImg release]; [buttons release]; if(defaultClickBtn) { [self toggle:defaultClickBtn]; [defaultClickBtn release]; } } return self; } - (void) transformation { if (!timer) return; NSNumber *number = [timer userInfo]; int offset = [number intValue]; CGPoint offsetPoint = buttonView.contentOffset; offsetPoint.x = offsetPoint.x + offset; if (offsetPoint.x <= 0) { offsetPoint.x = 0; [timer invalidate]; [timer release]; timer = nil; } else if(offsetPoint.x >= (buttonView.contentSize.width - buttonView.frame.size.width)) { offsetPoint.x = buttonView.contentSize.width - buttonView.frame.size.width; isTouchHold = 0; [timer invalidate]; [timer release]; timer = nil; } buttonView.contentOffset = offsetPoint; } - (void) startTimer:(id) sender { int space = sender == leftButton ? BUTTON_MOVE_SPACE * -1 : BUTTON_MOVE_SPACE; NSNumber *number = [[NSNumber alloc] initWithInt:space]; timer = [NSTimer scheduledTimerWithTimeInterval:0.005 target:self selector:@selector(transformation) userInfo:number repeats:YES]; [timer retain]; [number release]; } - (void) offsetButtonTouchBegin:(id) sender { isTouchHold = sender == leftButton ? -6 : 6; [self startTimer:sender]; } - (void) offsetButtonTouchEnd:(id) sender { [timer invalidate]; [timer release]; timer = nil; isTouchHold = 0; } void changeHiddenForButton(UIButton *button, BOOL isHidden) { float alpha = isHidden ? 0.0 : 1.0; if (button.alpha == alpha) return; [UIView beginAnimations: nil context:nil]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:1]; button.alpha = alpha; [UIView commitAnimations]; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { [self scrollViewDidEndDecelerating:scrollView]; } - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { float offset = scrollView.contentOffset.x; if (offset <= 0) { changeHiddenForButton(leftButton, YES); } else { changeHiddenForButton(leftButton, NO); } if(offset >= (scrollView.contentSize.width - scrollView.frame.size.width)) { changeHiddenForButton(rightButton, YES); } else { changeHiddenForButton(rightButton, NO); } } - (void)dealloc { [buttonView release]; [super dealloc]; } @end
这下代码够完整了吧...给公司写的,但是未经过测试,保佑不被老大发现.哈哈, 其实没啥技术含量, 反正都是你抄我, 我抄你..就是计算那些坐标系很是麻烦的说..
效果图:
发表评论
-
模拟HUD, 就是那种loading等待的对话框框
2010-09-26 17:07 1685这个是网上抄袭的,改了改: #import &l ... -
画线性渐变的条条
2010-09-26 16:12 5087代码如下: CGGradientRef buildCG ... -
如果你发现图片在真机中无法看见
2010-09-25 18:23 996看看代码中是否少了图片的后缀名,如果少了,模拟器是正常执行的, ... -
iPhone 后台模式的流程图
2010-09-25 18:21 1331要闪人了,今天清理电脑发现了还有这样一张关于后台模式的流程图。 ... -
xCode 设置SVN的问题
2010-08-19 17:23 1620在网上搜了下,确实只能用如下步骤来进行: 1) ... -
iPhone LineChart
2010-08-18 00:09 1868说实话,OC代码写着真的很别扭,速度明显慢N倍. 下面是一个 ... -
iPhone 利用CG API画一个饼图(Pie chart)
2010-08-12 21:59 3262核心函数是:CGContextAddArc(CGContext ... -
iPhone Core Graphics 和 Quartz的关系
2010-08-12 00:05 3142quartz属于core graphic framewo ... -
iPhone 突然发现,setting配置文件中的DefaultValue可能拿不了值
2010-08-10 21:32 2543按照我的想法,如果用户没有在setting设置值且有defau ... -
iPhone iOS4升级后导致的BASE SDK MISSING
2010-08-10 13:42 3919今天升级到iOS4, xCode也升级到3.2.3, 但 ... -
iPhone WebView中掉用Javascript
2010-08-09 22:43 2154[webView stringByEvaluatingJava ... -
iPhone 在app中掉用Safari打开一个url
2010-08-07 16:03 1559[[UIApplication sharedApplic ... -
iPhone 利用系统播放音频文件
2010-08-03 22:24 1148系统音频播放的格式很少,而且不支持太大的音频文件,但是它是最简 ... -
iPhone 和输入,键盘相关的属性
2010-08-02 23:02 2987当文本输入时, 文本框有几中选择用于辅助输入: tex ... -
iPhone 画圆角矩形
2010-08-02 00:31 2274@implementation BrightnessCo ... -
iPhone NavigationBar和UIToolbar基础
2010-08-01 23:41 5131navigation bar 分为三个部分,左按钮,右按钮和中 ... -
iPhone 简单手势的判断
2010-07-31 23:36 2322不知道4.0SDK带有手势的直接支持没有,至少3.2已经可以用 ... -
iPhone 简单动画过度
2010-07-29 22:44 9517在iPhone中动画过度非常简单. 首先获取当前的图形 ... -
iPhone 触摸时UITouch的常用方法及属性
2010-07-29 00:31 5778再UIView中,可以重些以下四个方法来来控制用户的触摸动作: ... -
iPhone 简单的重画
2010-07-28 21:07 2227在UIView中,重写drawRect: (CGRect) a ...
相关推荐
iPhone 开发 toolbar 拖拽 代码实例,toolbar使用范例,图标拖拽
基于Dialog的toolbar拖动功能,可自由拖动toolbar的功能,按钮也进行贴图处理,图片和文字左右显示,通过调整高度,可以进行上下显示。
在ToolBar工具栏居中添加自定义控件。
toolbar例子
div+css打造的类似vista效果的ToolBar
一个VB6.0的toolbar的使用示范,toolbar是很好用的控件
ToolBar在Toolbartray中的拖动
Toolbar的实现,弹出框的实现
微软树型菜单TOOLBAR。
Collapsing Toolbars-可以伸缩的ToolBar,可运行,带详细注释。
这是ToolBar使用的一个小栗子,代码很简单,可以用来了解Toolbar该怎么去使用
Toolbar基本使用及Toolbar+ListView实现滑动变色
位图类型的。toolbar ,可以移动的toolbar.
改代码实现了可以收缩和展开的toolbar
rebar + toolbar 界面rebar + toolbar 界面rebar + toolbar 界面rebar + toolbar 界面
Android 5.0的时候就用Toolbar替代了ActionBar,而ActionBarActivity又被AppCompatActivity替代,那么使用方法就是引入Toolbar设置到Activity中 一个应用的几乎所有界面都需要头部app bar,为了能够方便各个界面方便...
Android toolbar 使用详解,一个不错的学习toolbar的例子,里面包括各种toolbar用法
一个类似于Office Toolbar那样可以实现Dock的程序(14KB)
对于已经被不大好用的Actionbar折磨的开发者来说,Toolbar的出现确实是一个好消息,Toolbar是应用的内容的标准工具栏,可以说是Actionbar的升级版,两者不是独立关系,要使用Toolbar还是得跟ActionBar有关系的。...
VB基础的自带菜单栏使用和微软控件toolbar的使用