示例如下图:

可直接访问:http://easymorse.googlecode.com/svn/tags/WebBook-0.2/test.html,需要注意只能跑在有webkit浏览器的触摸设备上。
为什么会抖动
在iPad上,如果用传统的改变html元素的左上顶点坐标(left、top),会有可被用户察觉的抖动现象。
这是因为,浏览器不确定是否要使用GPU硬件加速,也许这个操作只是移动一个元素到某个位置。
这种指定顶点的做法,在鼠标操作设备上不会出现抖动现象,是因为鼠标的轨迹是连续的。而触摸设备的手指移动是离散的。
另外,浏览器是假定可用可不用硬件加速的地方,就不用硬件加速,这是因为,对于移动设备来说,硬件加速更消耗电池。
使用CSS3的translate,浏览器将使用硬件加速,手指移动的坐标离散量,会自动形成动画,这样看起来就不会抖动了。
另外,translate的另一个好处是和css布局无关,坐标是针对元素自己的,也就是从(0,0)开始。 Continue Reading »
iOS5支持开发自定义的容器控制器。比如下面这样:


在本示例中,屏幕的上半部分是嵌套在根控制器中的导航控制器(UINavigationController)。即:
Mac下的应用,如果想切换程序窗口,有很多办法,而且比windows应该多和方便。
这里总结一下,如果只是应用的窗口切换,可以快捷键:command+tab
如果是相同应用的多个窗口,比如safari,你开了两个窗口,可以通过菜单来切换:

使用NSCondition,类似Java中的wait,notify机制,可以实现多线程的同步,即,可实现生产者消费者问题。
基本思路是,首先要创建公用的NSCondition实例。然后:
- 消费者取得锁,取产品,如果没有,则wait,这时会释放锁,直到有线程唤醒它去消费产品;
- 生产者制造产品,首先也是要取得锁,然后生产,再发signal,语义等同Java的notify,这样可唤醒wait的消费者。
示例代码如下:
runloop可以阻塞线程,等待其他线程执行后再执行。
比如:
@implementation ViewController{
BOOL end;
}
…
– (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@”start new thread …”);
[NSThread detachNewThreadSelector:@selector(runOnNewThread) toTarget:self withObject:nil];
while (!end) {
NSLog(@”runloop…”);
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
NSLog(@”runloop end.”);
}
NSLog(@”ok.”);
}
-(void)runOnNewThread{
NSLog(@”run for new thread …”);
sleep(1);
end=YES;
NSLog(@”end.”);
}
但是这样做,运行时会发现,while循环后执行的语句会在很长时间后才被执行。
使用ARC编写全新的项目是很容易的。下面用一个简单的项目来说明使用方法。
先看写好后的样子:

代码很简单。有两个视图,左边视图提交切换到右边视图,右边视图点返回回到左边视图。
首先是创建项目,使用创建项目向导,这里创建一个单视图应用(Single View Application)。

以前,实例变量必须写在文件中,如这样:
@interface Person : NSObject{
NSString *name;
}
刚开始这样用的时候,觉得这不和常理啊,实例变量,为什么要放在公共的h文件中呢,应该放在实现的文件中才对。
Xcode4.2默认使用llvm做编译,带来了一些改变,其中,就是可以在m文件中声明实例变量:
@implementation Person{
NSString *name;
}



