“你是否也认为在使用UITableView的时候有那么一点点困难呢?我发现有一种便捷的方法来创建多层级的TableView……但这仅限于只有文字的情况,你可以看看TextTableData 类是如何自定义一个TableView的” —— 这是作者遇到的情况及解决方案。
源码:TextTableExample.zip(30kb)
需要注意的是直接编译运行会报错,问题出在Xcode 4.5 已经不支持用数值给NSString类赋值了。(其他的cocoa类应该也是如此),所以我们需要做一个转换:
旧版代码
[cpp]
for (TextTableElement* ttElement in inElements) {
label = ttElement.label;
label += 0x1; // Avoid compiler warning
}
for (TextTableElement* ttElement in inElements) {
label = ttElement.label;
label += 0x1; // Avoid compiler warning
}
新版代码
[cpp]
for (TextTableElement* ttElement in inElements) {
label = ttElement.label;
int intLabel = [label intValue];
intLabel += 0x1; // Avoid compiler warning
label = [NSString stringWithFormat:@"%d",intLabel];
}
for (TextTableElement* ttElement in inElements) {
label = ttElement.label;
int intLabel = [label intValue];
intLabel += 0x1; // Avoid compiler warning
label = [NSString stringWithFormat:@"%d",intLabel];
}
这样就可以顺利使NSString的值自增。
代码可以顺利运行。但是按目前的“流行标准”来看,似乎这样的设计基本是用不到了。在此推荐另一种“多层级”的TableView —— 可折叠的TableView:
http://blog.csdn.net/kmyhy/article/details/5979560
另外也可以看看code4app中一个很好的TableView示例:
http://code4app.com/ios/TableView%E7%9A%84%E5%90%84%E7%A7%8D%E6%93%8D%E4%BD%9C/50bf05986803fa8e5c000001
这个例子是许多App都在使用的一种模式,非常适合用来组织含大量数据的TableView。
--------------------------------------------------------------------------------
范例2:PNG动画
iPhone/iOS 不支持播放gif格式的动画,于是连续播放动画就需要一些“曲线救国”的方法,我想一般人都会选择比较熟悉的CoreAnimation进行图片的连续播放来达到目的。似乎这位Mo DeJong同学对影音处理特别感兴趣,他用的是 MediaPlayer.framework 中的 MPMoviePlayerController 。“当你用到MPMoviePlayerController的时候你应该也像我一样想抓头发……” 作者认为官方API提供的功能“大部分都需要自己进行完善”才能播放音、视频,而且不能完成他“连续播放一些PNG图片”的需求。MPMoviePlayerController不能搞定,CoreAnimation又会占尽内存 —— 怎么办?看作者的例子吧。在15FPS下播放30帧480x320的PNG图像,后面说了一堆关于CPU性能和音频支持方面的我不太懂就不瞎翻译了。
源码:PNGAnimatorDemo.zip(165kb)
这个代码运行正常,据作者描述他的方法只在需要这张图片时加载它而不是去读取所有帧然后占满内存。我们先来看看CoreAnimation的“缓存式”播放图片的方法:
[cpp]
imageView =[[ UIImageView alloc ] initWithFrame : CGRectMake (0, 100, 320, 320)];
imageView . animationImages =images;
[images release ];
imageView . animationDuration =10;
imageView . animationRepeatCount =100;
[ imageView startAnimating ];
imageView =[[ UIImageView alloc ] initWithFrame : CGRectMake (0, 100, 320, 320)];
imageView . animationImages =images;
[images release ];
imageView . animationDuration =10;
imageView . animationRepeatCount =100;
[ imageView startAnimating ];
基本思路就是有一个NSMutableArray的数组images,把图片逐个加载到images中,再传递给imageView进行连续播放。
而他的方法则是在重复这一段代码:
[cpp]
if ((frame >= animationNumFrames) || (frame < 0))
return;
NSData *data = [animationData objectAtIndex:frame];
UIImage *img = [UIImage imageWithData:data];
imageView.image = img;
if ((frame >= animationNumFrames) || (frame < 0))
return;
NSData *data = [animationData objectAtIndex:frame];