[ios]简单的饼图代码推荐

屏幕快照 2011-01-10 上午11.45.25

在iphone上画报表,有收费的方案,一般开源的推荐就是:

不过,如果你只是想画饼图,同时也不想给自己找太多麻烦,或是项目时间太紧,可以试试以下这个简单的方案。

代码来自 cocoachina.com

使用这段代码有常见的两个问题的解决方案

1:阴影

如果你不想要原来代码中的阴影,搜”CGFloat CGGradientCreateWithColorComponents“,把第二个参数改成nil。

CGGradientRef gradient = CGGradientCreateWithColorComponents(colorspace, nil, nil, 2);


2.缺角

当你做了第一步之后,会发现饼缺一个角,这应该是一个Bug.

搜”只有弧度《 3.14 的才会画前面的厚度”把else中的break改成continue.

 

[ios note]实现UITextView的圆角

屏幕快照 2011-01-06 下午06.46.31

UITextView用于显示和输入大段文字,没有设置圆角的属性,跟UITextField不一致,在既有UITextField又有UITextView的界面中显得很突兀。

实现UITextView圆角的方法是借助UITextView的layer.原码如下:

foobar.h

#import <QuartzCore/QuartzCore.h>

foobar.m

note.layer.cornerRadius = 6;

note.layer.masksToBounds = YES;


效果:

屏幕快照 2011-01-06 下午06.45.57

 

你好,2011

2011年的第一天就要结束了。这一年的目标只有一个:要目田。

[ios note] SQLite Tutorial

[ios note] view


http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html#//apple_ref/doc/uid/TP40009503-CH5-SW6

view是程序与用户交流的主要方式。

新建和配置view

用IB或手动创建view,然后加到view hierachies中用。
最简单的做法是在IB中用图型化的方法来处理。
在IB中,你可添加view,分配到hierachies中,配置它们,把view的行为跟代码关联起来。
一般来说,在IB中看到的跟运行时看到的一样。
做完后保存为nib file,这个文件保存对象的状态和配置。
用nib file来保存某个view controller对应的所有view
nib file中最顶级的view用来描述viewcontroller.view
顶级的view应该跟设备屏幕一样大。很少有用nib file来保存部分view的。
nib file跟view controller一起用的时候,需要用nib file的信息来实始化view controller.
系统会在合适的时候载入或去掉你的view。
如果你的nib file并没有跟一个view controller关联,也可以在代码中载入它,通过 NSBundle or UINib 对象。
手动
使用标准的allocation/initialization pattern.
默认初始化view的方法是initWithFrame: 设定它在父view中的大小和位置。
示列:
CGRect  viewRect = CGRectMake(0, 0, 100, 100);
UIView* myView = [[UIView alloc] initWithFrame:viewRect];

 

然后把它加入父view中,见“Adding and Removing Subviews.”

view的属性
属性控制显示和行为
UIView Class Reference.
可以用 view的tag属性做标记,方便在代码中实时地访问view
tag值默认为0
使用UIView的 viewWithTag:方法来检索。
它使用深度优先的算法检索当前view和它的子view(view层级是树状的)

新建和配置view层级
管理view层级是关键动作
包括显示和行为
上图为典型的结构。
还是一样,可以用IB或手动来做层级管理。
添加和删除subview
IB是最方使的方法,所见即所得。拖动扣作。
手动
  • 添加subview  addSubview:
  • 插入subview insertSubView开头三方法  可指定位置
  • 重排subview
  • 移除subview

把subview插入到view时,大小超出view的部分不自动截断。

如果要截断,手动设clipsToBounds

(一堆属性的用法)

转化坐标
很多时候(特别是touch事件处理),程序需要在不同的view frame rect之类的东西之类转换坐标。例如:touch事件向系统报告时使用window坐标系,view处理事件的时候往往要转换成view的本地坐标系统。
UIView中定义了以下方法做转化:
在运行时调整view的大小和位置
一个view的大小变化时,它的subview应该跟着变。
UIView同时支持自动变和手动变。
自动变的情况,需要设定规则。
手动变时,设定具体的大小和位置。
当发生以下事件时,Layout会改变
view的bounds rectangle变化了。
手持设备方向变了
The set of Core Animation sublayers associated with the view’s layer changes and requires layout.
程序调用了view的 setNeedsLayout or layoutIfNeeded
程序调用了view’s underlying layer object的setNeedsLayout
自动处理
autoresizesSubviews subview是否重排
autoresizingMask 控制subview如何重排,这个属性可以组合使用
参考 Table 3-2
手动
当一个view的大小改变时,view的layoutSubview被调用
于是你可以实现layoutSubview方法以实现手工修改布局
通过这一方法可以做到:
直接修改subviews的大小和布局。
增加或移除subviews或Core Animation layers.
使subvewi重绘。
常见的重排subviews的程序是那种有一个非常大的滚动区的程序
当一个程序有非常大的滚动区(N屏)的时候,直接载入一个这么大的view是不合适的,程序一般载入部分可见的view,当滚动动作发生时,即时重排。
写手动重排代码的时候要注意 :
1  设备方向改变
2 有电话呼入的时候,状态栏高度会变化。
两个参考
手动   see the ScrollViewSuite sample.
运行时改动view
程序需要用户输入时,要调整界面响应这个输入(典型的如把当前输入框贴到软键盘上面)
典型的行为如下:
与core animation layers交互
自定义view
自定义一个view的checklist
  • 初始化
  • dealloc 清理
  • drawRect:  绘
  • autoresizingMask  自动重排行为
  • 如果包含subview
    • 初始化时创建 subview
    • 设置subview的  autoresizingMask
    • 如果subview需要自定义layout 重写 layoutSubviews
  • 处理touch-based event
  • 如果要求view的打印版和屏幕上显示的不同,重写 drawRect:forViewPrintFormatter:

黑松白鹿

C360_2010-12-18 18-15-45C360_2010-12-18 18-17-40C360_2010-12-18 18-17-56

 

不错的日本料理店,生吃蠔极靠谱。

[ios note] windows

原文档位置

每个ios程序都至少需要一个window, UIWindow类的一个实例,有一些则可以需要更多。

Window有如下职责:
包含可视的内容
把用户操作分发给View和其它对象 这一过程中扮演重要角色
帮助view controller处理位置变化

在iO中,window没有标题状态栏一类的东西,就是个空白的框
同样,程序要改变内容时,也不改变window,改变的是window包含的view中最前面的那几枚。

大部分的程序只用一个window,这个window占据全屏,从main nib file载入(或者纯手工代码实现)。

一般来说,其它的window都是由系统创建的,由特定的event触发,比如有电话接入。

windows相关任务


大部分程序一辈子只动一次window,就是在程序开始时创建一下。
如果需要,也可以用window实现来做一些事情:
重新转换坐标点和rectangle
see “Converting Coordinates in the View Hierarchy.”
用notifications来跟踪window相关的变化
see “Monitoring Window Changes.”

建立和配置windows


可以用IB,也可以手动
运行时创建,delegate obejct retain一个window
如果程序用了多于一个winows, 一般做法是用时才加载(另一个)
无论程序是前台还是后台,主window都在launch time(?)创建。
建立和配置的代价并不高。
但如果程序启动直接进后台,最好不要在它进入前台前做window.

用IB
一般不用自己动手,xcode自带一个MainWindow.xib
在application delegate object里面定义outlet,在程序中使用这个outlet操作window
注意
建议使window全屏,如果不这样做,可能有一些touch事件无法收到
这是因为,只有window范围内的touch事件能被识别。view按说是在window中,但iOS并不限制view显示在winows外。即:若不全屏,有可以出现以下情况:看到一个按钮,点击无反应,因为它不在window的rectangle的范围内。
用IB时也要:
使用outlet关联到delegate或file owner,这样代码中才能访问。
如果要用自已的xib替代MainWindow,需要在Info.plist中修改属性。

更多资源 see Interface Builder User Guide.

手动
在delegate的application:didFinishLaunchingWithOptions:中加入如下代码
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
这里假设delegate有一个用来retain window的属性(self.window)
建window确认全屏,不需要为statues bar之类的东西预留空间,这事儿在放view的时候做,view controller会自动处理。
往window里面添加view
每个window都有一个相应的root view obejct (由相应的view controller管理)
使用单一的root view可以简化工作。
[window addSubview:viewController.view];
用nib file来做这事更简单,只要设一个属性。
可以用任何view来做 root view。
配置一个root view时,你需要同时设定它在window中的大小和位置。
改变window Level
每个window都有可配置的 windowLevel 属性,决定其与其它window的关系,上还是下。
监视window改变
使用相关notifications

 

空椅子

empty.jpg

加班

我们的祖国,就是有把正不正常的事变正常的能力,同时也把正常的事变不正常了,比如加班不给钱。

这个项目刚开始的时候,我坚持撑着不加班,后来也撑不住了。我实在找不到加班的理由,要一个人加班,他从加班这件事中能得到什么呢?

首先,我们不多给钱,没有人会因为加班得到奖金。

其次,这就是一个用无差别人类劳动到市场上换钱的项目,就是说从技术角度讲,它并没有让人眼前一亮或保持持续兴奋的地方。曾经有一个故事说,从前有一个程序员,他老婆在产床上睁开双眼看到他还是写代码,于是质问他说那破游戏比她还重要么?这个程序员回答说这不是破游戏,这是星际争霸。我们做的不是星际争霸,我们不改变世界,当然也不改变中国。

再次,我们使用上个世纪的技术,从经验值的获取来看,相当于三十级四围30,30,30,30的英雄带着骨龙砍十个骷髅,当然,英雄的四围也许没那么高,带的也可能不是骨龙而是僵尸,但经验值确实就就那么多了。

以我的角度上,程序员能从这个项目中得到的非常少,在商言商地说,甚至是负的。因为工作这件事,本质上来说,就是一个人将自己的时间卖给公司,在这段卖掉的时间里,他不能做自己的事,要做公司要求的事。加班,就降低了他单位时间的售价。

那么程序员为什么不辞职呢?程序员抱怨加班,抱怨伙食太差,抱怨公司行政人力太SB,他们却不辞职。

是因为懒惰和恐惧吧。懒得出去找工作,懒得折腾,害怕辞职之后找不到工作,还不起房贷。

公司就是利用这一点,公司比程序员强一些的地方在于,它对雇员的承受力,远比员工失去工作的承受力为高。亚当斯密说过这事儿,假设公司不开工,一年才会破产的话,劳动者经常不工作两个月就要饿死了。于是劳动者对加班这给钱这事儿的容忍度也高一些,之后又高了一些,再高一些,于是有一天我们头对我说,你看我们整个公司的这样,外面的公司其实也差不多。

对于公司来说,这么做的风险在于,忽然有一些,劳动者不忍了,他们竟然提出要辞职,(应该不会有罢工这回事,这需要组织,至少我们公司来说,工会的作用联系一些企业到公司来搞促销)这个比较麻烦,不过这件事发生的机率非常非常小。一般情况下,只会是他提出辞职,不会是他们。这事儿麻烦一点,公司越小越麻烦,所以事实上,小公司的待遇反而好一些,因为人员离职对他们整体的伤害更大。而大公司早就有应对之策,它会先让你的工作永远有人可以代替,所有paul有篇文章就说为什么不要为大公司打工

顺带一提,我辞职了,在工作交接期。

 

 

 

即将退休

me & ace (艾斯最近喜欢趁我站在洗手池旁边的时候跳到我背上来,这事儿路飞永远也做不到,路飞是一只连窗台都跳不上去的恐高猫,丢尽了猫科的脸)

下午跟主管领导说了想辞职的事,没有意外的话,最晚一个月后,就小退休了。

大约到明年五月前,过上喂猫跑步写自己想写的代码的好日子。