- 浏览: 164529 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 1731这个是网上抄袭的,改了改: #import &l ... -
画线性渐变的条条
2010-09-26 16:12 5124代码如下: CGGradientRef buildCG ... -
如果你发现图片在真机中无法看见
2010-09-25 18:23 1038看看代码中是否少了图片的后缀名,如果少了,模拟器是正常执行的, ... -
iPhone 后台模式的流程图
2010-09-25 18:21 1370要闪人了,今天清理电脑发现了还有这样一张关于后台模式的流程图。 ... -
xCode 设置SVN的问题
2010-08-19 17:23 1655在网上搜了下,确实只能用如下步骤来进行: 1) ... -
iPhone LineChart
2010-08-18 00:09 1932说实话,OC代码写着真的很别扭,速度明显慢N倍. 下面是一个 ... -
iPhone 利用CG API画一个饼图(Pie chart)
2010-08-12 21:59 3292核心函数是:CGContextAddArc(CGContext ... -
iPhone Core Graphics 和 Quartz的关系
2010-08-12 00:05 3175quartz属于core graphic framewo ... -
iPhone 突然发现,setting配置文件中的DefaultValue可能拿不了值
2010-08-10 21:32 2583按照我的想法,如果用户没有在setting设置值且有defau ... -
iPhone iOS4升级后导致的BASE SDK MISSING
2010-08-10 13:42 3954今天升级到iOS4, xCode也升级到3.2.3, 但 ... -
iPhone WebView中掉用Javascript
2010-08-09 22:43 2192[webView stringByEvaluatingJava ... -
iPhone 在app中掉用Safari打开一个url
2010-08-07 16:03 1592[[UIApplication sharedApplic ... -
iPhone 利用系统播放音频文件
2010-08-03 22:24 1189系统音频播放的格式很少,而且不支持太大的音频文件,但是它是最简 ... -
iPhone 和输入,键盘相关的属性
2010-08-02 23:02 3035当文本输入时, 文本框有几中选择用于辅助输入: tex ... -
iPhone 画圆角矩形
2010-08-02 00:31 2318@implementation BrightnessCo ... -
iPhone NavigationBar和UIToolbar基础
2010-08-01 23:41 5166navigation bar 分为三个部分,左按钮,右按钮和中 ... -
iPhone 简单手势的判断
2010-07-31 23:36 2350不知道4.0SDK带有手势的直接支持没有,至少3.2已经可以用 ... -
iPhone 简单动画过度
2010-07-29 22:44 9575在iPhone中动画过度非常简单. 首先获取当前的图形 ... -
iPhone 触摸时UITouch的常用方法及属性
2010-07-29 00:31 5810再UIView中,可以重些以下四个方法来来控制用户的触摸动作: ... -
iPhone 简单的重画
2010-07-28 21:07 2257在UIView中,重写drawRect: (CGRect) a ...
相关推荐
在Windows系统中,我们经常看到任务栏右下角的通知区域,那里就是`ToolbarTray`的一个典型应用,它可以将`ToolBar`停靠在屏幕边缘,或者允许用户自由拖动,实现浮动效果。`ToolbarTray`的使用可以使得`ToolBar`控件...
在本文中,我们将深入探讨如何实现一个基于Dialog的toolbar拖动功能,以及在这个过程中涉及到的相关技术。这个项目名为"ToolBarDialogDragging",它允许用户自由地拖动toolbar,并且按钮支持贴图处理,图片和文字...
本示例专注于“iPhone toolbar拖拽效果”,这是一项增强用户体验的技术,允许用户通过手势直接拖动工具栏上的图标,从而实现功能切换或操作。在iOS应用中,这种效果可以增加用户的参与度和应用的易用性。 首先,...
在Android开发中,`ToolBar`是App界面设计中常用的一个组件,它作为Activity或Fragment的顶部栏,可以提供导航、菜单和其他操作。本教程将详细讲解如何在`ToolBar`中居中添加自定义控件,以提升应用界面的美观度和...
2. 从工具箱中拖拽一个`Toolbar`控件到窗体上,你可以通过调整其大小和位置来适应窗体设计。 3. 在属性窗口中,可以设置`Toolbar`的各种属性,如前文所述的`ButtonWidth`、`ButtonHeight`等。 4. 添加按钮:点击`...
在XML布局文件中,我们可以这样定义一个`Toolbar`: ```xml <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize...
通过设置`CollapsingToolbarLayout`,我们可以实现类似Google Play商店那样的头部动态效果。 总之,`Toolbar`是一个高度可定制的组件,提供了丰富的功能和设计可能性。通过理解和熟练运用`Toolbar`,开发者可以打造...
在Android开发中,Collapsing Toolbar是Android设计支持库提供的一种功能强大的布局组件,它允许ToolBar在用户滚动视图时动态地改变其高度和可见性,从而实现类似iOS中的Parallax效果,为应用添加丰富的视觉体验。...
同时,通过结合使用`PopupMenu`,开发者可以轻松实现类似下拉菜单的功能,提升应用的交互体验。在实际项目中,开发者还可以根据需求进一步扩展`Toolbar`的功能,如添加自定义视图、动画效果等。
标题中的“Toolbar、TabLayout、AppBarLayout和RecyclerView组合可以滑动收起或显示Toolbar的demo”涉及了Android应用开发中的几个关键组件和技术。在Android应用设计中,这些组件经常被用来构建用户友好的界面,...
在拖动过程中,需要更新toolbar的位置,并在鼠标释放时结束拖动。这通常涉及到复杂的坐标计算和消息响应,确保toolbar在屏幕上的位置正确更新。 总结来说,创建bitmap类型的toolbar并实现其可移动性涉及以下步骤: ...
1. **ToolBar基本使用**:ToolBar是Android Support Library中的一个组件,继承自android.widget.Toolbar,它可以替代传统的ActionBar,并提供了更多的自定义可能性。使用ToolBar需要在布局文件中添加控件,然后在...
而在Web开发中,例如`HTML5`,可以使用`<toolbar>`或自定义CSS样式来创建类似的效果。 接下来,我们讨论如何在`ToolBar`上添加滚动条。滚动条是一种允许用户查看和浏览超出屏幕可视区域的内容的控件。在`ToolBar`中...
在"ToolbarDemo"的源代码中,你可能会看到类似以下的代码片段: ```csharp private void toolStripButton1_Click(object sender, EventArgs e) { // 打开新窗口的代码 Form2 newForm = new Form2(); newForm....
在微软的开发框架如.NET Framework中,可以使用Windows Forms或WPF等技术来创建树型菜单TOOLBAR。这些框架提供了丰富的控件和事件处理机制,使得开发过程相对简单。 综上所述,微软树型菜单TOOLBAR是用户界面设计...
在Android开发中,ToolBar主要作为布局的顶部元素,可以承载应用图标、标题、菜单项等,为用户提供导航和操作。它的使用主要包括以下几个步骤: 1. 引入依赖:在项目的build.gradle模块文件中添加对Android Design ...
总结:通过上述步骤,我们不仅可以了解Toolbar的基本使用,如设置标题、图标以及自定义样式,还可以实现一个高级功能——结合ListView实现滑动变色效果。这种效果可以提升用户的交互体验,让应用看起来更加生动和...
相比于之前版本中需要手动构建工具条的方式,使用Toolbar控件可以更轻松地实现类似Word 7.0风格的工具条。 ##### 1. 添加Toolbar到工具箱 - **步骤**:首先需要通过Project菜单下的Components命令将Toolbar添加到...
在Android开发中,Toolbar作为Action Bar的...同时,了解如何在Toolbar上添加交互元素,如提示信息,可以提升用户体验,使应用更加友好。通过深入学习和实践这些示例,开发者将更好地掌握Android UI设计中的关键技巧。
总结,"一个类似Vista的ToolBar"项目涉及到前端开发中的CSS布局、视觉特效、响应式设计、交互实现等多个关键知识点,展示了如何使用现代Web技术构建出美观且功能丰富的用户界面。通过学习和实践此类项目,开发者可以...