ActionBarSherlock是JakeWharton编写的一个开源框架,使用这个框架,可以实现在所有的Android版本上实现ActionBar的效果和功能。当在4.0+的版本使用时,会使用Android自身的ActionBar,当在4.0之前的版本使用时,则会使用ActionBarSherlock自身自定义的一套框架来实现ActionBar的功能。
actionbarsherlock这个项目的作用是用来作为其他项目的lib,在项目名称上 右键->properties->Android可以看到下面的Is Library复选框是勾选上的,如果没有,现在勾上。
这几个文件夹都是工程目录,我们只需要关注其中的四个就足够了:demos,fragments,roboguice,styled。我们首先将demos项目导入工作空间,方法和之前导入actionbarsherlock一样。导入完毕后如下:
右键项目的名称->properties->Android可以看到,
我们需要将actionbarsherlock项目作为该项目的库,所以这里我们需要操作一下,先将打了红叉的那一条选中->remove,然后点击Add,会看到:
选择actionbarsherlock->OK,会看到:
接下来,用同样的方法,我们可以把其他三个示例项目导入到工作空间中,但是这个时候你可能会遇到一个问题,比如说在导入fragments这个项目的时候会出现下面的情况:
因为和之前导入的项目同名了,所以我们还要将之前导入的项目改一下名字,并将后面导入的项目都改一下名字,防止他们同名,这样就可以了。
看到网上有些人教你将actionbarsherlock的代码和资源copy出来手动加到自己的项目里,这样其实是不对的。
转载请注明http://blog.csdn.net/carrey1989/article/details/12832081
首先说一下实现的原理, 首先当手指开始触摸屏幕 以及滑动的时候, 效果与画矩形框是一样的 因此 此时的代码也机会没有区别,
当手指松开后 在当前的矩形框处创建一个临时的textView ,并且背景变为灰色,textView 编辑结束, 在textView的 完成委托方法中 去掉灰色的背景 去掉临时的textView 在相同的位置上 利用coreText 显示出刚才编辑的内容
首先 手指触摸 会调用到
TextTool.m
代码 除了注释的那一句 基本上与前面的矩形 是相同的 纪录下来 UITouch 的实例 以及 开始的点
而注释那一句 得到的touchedView 就是dudelView 如果此处设置为yes 在textView 成为第一响应 弹出键盘后,我们可以直接触摸view 来取消TextView的第一响应状态
随着手指移动 不断调用到 touchMoved 但是 与前面矩形的实现一样 这里的touchMoved方法为空 画出临时矩形的实现代码在
drawTemporary 方法中
TextTool.m
completedPath是一个UIBezierPath 的实例, 在touchEnded方法中 将最终矩形的路径 设置到其中, 所以在手指抬起来以前 都只会进入到else分支, 根据 起点与当前手指触摸的点 描出一个矩形来
当手指抬起来后 进入touchEnded方法,而主要的实现代码就在这里面
TextTool.m
首先 得到起点,终点,然后清空数组
if (distanceBetween(startPoint, endPoint) < 50.0) return; 进行了一个判断, 防止用户画的矩形太小,影响输入文字,
如果大小没问题,接下来 便将最终的矩形路径 赋值到 self.completedPath 在退出此方法后 进入drawTemporary后就会进入if分支
接着画出 灰色的背景, 此处的设置透明度为0.5, 并且为背景view设置tag为SHADE_TAG 这个标记用来在以后 编辑完成的时候通过 viewWithTag方法 找到这个背景的实例 并且 移除它
接下来便开始创建textView 其frame就是 刚在最终得到的矩形路径的位置信息
接着注册了一些通知, 即在键盘弹出,或者落下的时候 调用的几个方法
下面的一部分代码实现的功能是 如果键盘弹出 可能会挡住 textView 判断 是否挡住了 如果挡住了 需要向上移动多少距离,并且将这个距离 赋值给全局的 变量viewSlideDistance 如果没有挡住 设置为0
最后将textView显示出来,并且通过[textView becomeFirstResponder]; 在其刚显示的时候 马上成为第一响应者,弹出键盘
下面两个方法在键盘弹出之前以及落下之前,调用 移动视图,防止textView 被挡
当我们编辑完了内容后 我们可以点击屏幕的其他地方(我们设置了[dudelView endEditing:YES]) 或者点击键盘上的落下键盘按钮 这时 进入textView的 delegate
这里 用到了一个新类TextDrawingInfo 同上一章 的PathDrawingInfo 类似,都是 存放一个完整操作的 全部信息,由于上一章我们做的是绘图操作,因此PathDrawingInfo 存放的是每次绘图操作的信息, 而这次我们主要向利用coreText在屏幕上显示文字 那么之前绘制的矩形的信息 此时已经没有用 我门要 取得 CoreText 需要的信息,即我们这次文字操作的信息 存到TextDrawingInfo 中去 并且添加到 dudelView 的 drawables中 最后 将没用的东西全部从屏幕上移除
最后看以下 TextDrawingInfo 中的draw方法是怎么把文字绘制上去的
首先获得当前的上下文
创建一个属性自字符串NSMutableAttributedString 并设置他的颜色以及其他属性
利用该属性字符串 创建一个CTFramesetterRef
再创建一个CTFrameRef
释放之前创建的CTFramesetterRef 对象framesetter
由于CoreText 是来自于Mac OS X的 它在绘图的时候 认为坐标轴是倒置的,所以在没ios中会产生倒置的效果,这里要转化以下才能正常显示
学习这一章 主要学习它的思路 怎么实现在一个view上 画出一个矩形框后 就是一个testView 并且编辑完成后 在相应的位置相识出编辑的内容 当然我们也可以利用 一些其他的图文混排的库 比如DTcoreText
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[NSThread sleepForTimeInterval:3]; //就这一句代码就搞掂
// Add the view controller's view to the window and display.
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];
return YES;
}