Category: 计算机技术

如何通过手势选择到子视图

iOS提供了方便的手势API(参见编写简单的手势示例:Tap),从iOS3.2开始。在这里介绍了通过手势控制视图的示例:排列和拖动视图。 但是,如果要通过手势控制子视图呢? 可以在手势的delegate方法中: – (void)panPiece:(UIPanGestureRecognizer *)gestureRecognizer{     NSLog(@">>gesture…..");         CGPoint location=[gestureRecognizer locationInView:self.view];         UIView *hitView=[self.view hitTest:location withEvent:nil];         NSLog(@">>>%@",hitView); 日志引用如何通过手势捕获CALayer    发送文章为PDF   

星期三 一月 26th, 2011 in 计算机技术 | No Comments »

排列和拖动视图

写了个排列和拖动视图的示例。样子类似这样: 左边是应用启动后的样子,类似使用圆参数方程平均分布图片在圆的周长上。右侧的截图,是拖拽后的效果,支持多点拖拽。 写这个代码是借鉴了Apple官方的:https://developer.apple.com/library/ios/#samplecode/Touches/Introduction/Intro.html 样子是这样的,不但能拖拽,还可以转动: 日志引用如何通过手势捕获CALayer如何通过手势选择到子视图    发送文章为PDF   

星期二 一月 25th, 2011 in 计算机技术 | No Comments »

java特殊格式的时间处理

在java里,对数据进行格式化处理的对象在java.text包中。比如:MessageFormat。一般来说,如果去某一天中的某个时间的格式显示可以: System.out.println(MessageFormat.format("当前时间:{0,time}", new Date())); 或者,用长整型数也可以: System.out.println(MessageFormat.format("当前时间:{0,time}", 123456789)); 得到的显示类似这样: 当前时间:10:25:44 不过,这个时间显示是带默认时区的,比如在中国,如果按照格林尼治时间是凌晨1点,会调整为上午9点,因为中国是东八区。 在特殊的场合,这种显示就不符合需求了。比如要写个播放器,里面需要显示视频播放的时长。 当然只要会java就可以写出格式化的方法。不过要注意的是,要考虑国际化/本地化的问题,如果在代码中写了本地化的文字提示,或者当前应用的文字,就不大好复用了。 这里写一个简单的代码,供有此需求的人参考: long time = 1000 * 3600 * 25 + 1000 * 60 * 5 + 1000 * 62; long sec = 1000; long min = 1000 * 60; long hour = min * 60; System.out.println(MessageFormat.format(         "{0,number,00}:{1,number,00}:{2,number,00}", time / hour, time                 [...]

星期一 一月 24th, 2011 in 计算机技术 | No Comments »

简单的关键帧动画

关键帧,key frame,也就是说,一个完整的动画中要出现这些frame,然后按照次序播放,系统会补全这些frame之间的动画。最终形成一个完整的动画。 这里要用到CAAnimation以及它的子类。因为CAAnimation是超类,抽象的,不能直接使用的。它有两个子类(间接子类,它们之间还有CAPropertyAnimation),可用于关键帧动画支持: CABasicAnimation:只能实现简单的动画,不支持复杂变化比如坐标,因为只有fromValue和toValue; CAKeyframeAnimation:可支持比较复杂的变化,因为可以将变化设置到Array中。 下面在编写基于CALayer的简单动画的基础上,做了个画圆的简单动画。左侧是点击前的样子,右侧是点击红色矩形后,该矩形的动画路线。 日志引用使用贝塞尔曲线实现关键帧动画拖动层并播放动画    发送文章为PDF   

星期五 一月 21st, 2011 in 计算机技术 | No Comments »

拖动动画的问题及解决

在编写基于CALayer的简单动画中虽然可以touch来拖动动画了,但是赶紧稍微手指移动快一点,红色矩形块就被落在后面了。这是因为在touch移动的时候,系统默认的隐式CATransaction(动画的处理类)在常数时间内播放动画。这时候就需要显式CATransaction出马了,需要自己创建新的CATransaction,在touch移动的过程中关闭动画处理: – (void)touchesMoved:(NSSet *)touches            withEvent:(UIEvent *)event{     UITouch *t = [touches anyObject];     CGPoint p = [t locationInView:self];     [CATransaction begin];     [CATransaction setValue:[NSNumber numberWithBool:YES]                      forKey:kCATransactionDisableActions];     starLayer.position=p;     [CATransaction commit];     NSLog(@">>>touchesMoved>>@%",p); } 日志引用多个CALayer的联动    发送文章为PDF   

星期四 一月 20th, 2011 in 计算机技术 | No Comments »

编写基于CALayer的简单动画

通过操作CALayer的属性,可以编写比较简单的动画。本例基于不使用nib文件的写法,增加了多全屏的touch事件的监听,然后红色小方块会动画移动到touch的点上。 其实,是在编写本文示例的时候,屏幕上有些点touch无效,才发现有关iPad强制横屏的解决方法的问题。 日志引用简单的关键帧动画拖动动画的问题及解决    发送文章为PDF   

星期四 一月 20th, 2011 in 计算机技术 | No Comments »

有关iPad强制横屏的解决方法

在不使用nib文件的写法示例中,如果按照: self.view=[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 创建根view,实际上生成的view宽度是768,高度是1024。造成的现象是这样的: 这里比较奇怪的事情是:root view既然是768,0124,为什么设置的背景色能充满768以外的区域。 没想出很好的办法。最后还是用比较省事的办法来吧: self.view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; 右图是解决后的屏幕截图。 日志引用编写基于CALayer的简单动画    发送文章为PDF   

星期四 一月 20th, 2011 in 计算机技术 | No Comments »

Layer的Z轴定位

iOS的Layer有z轴的概念。比如: 红色和灰色是两个Layer,是相邻Layer,都有相同的父Layer。调整z轴参数,让指定的Layer在前面。另外,父Layer是一定在子Layer的后面的。    发送文章为PDF   

星期四 一月 20th, 2011 in 计算机技术 | No Comments »

Layer在坐标系中的位置

默认情况下,设置: [starLayer setPosition:CGPointMake(1024/2, 768/2)]; 并不是按照Layer顶点来定位的,而是Layer这个矩形的中心,这也是为什么在不使用nib文件的写法中看到的红色部分居中的效果。 如果需要偏离,需要使用AnchorPoint属性。默认情况下(不设置的情况下),相当于设置了: [starLayer setAnchorPoint:CGPointMake(0.5, 0.5)]; 对y轴来说如果是1则会到顶部,0则会到底部。如上图所示。    发送文章为PDF   

星期四 一月 20th, 2011 in 计算机技术 | No Comments »

不使用nib文件的写法

也许不使用nib文件,可以让程序员对代码有更直接的控制。说一下做法。做法最后实现的是一个特别简单的视图效果: 样子如左图,右边画了个简单的示意性草图。我们要实现的view是在root view上的,然后在my view的默认layer上加了个子layer,就是显示红色的部分。 日志引用编写基于CALayer的简单动画有关iPad强制横屏的解决方法Layer的Z轴定位Layer在坐标系中的位置    发送文章为PDF   

星期四 一月 20th, 2011 in 计算机技术 | 1 Comment »