用Icon Composer制作Mac/iPhone程序图标

上传过App Store的人还记得自己需要制作的各种尺寸的图标么?

制作Mac/iPhone的图标的工作就不用Firework/Photoshop了吧…

对!Apple的Developer文件夹不是白给的!(冷静…)

请大家找到Icon Composer,下面是路径~~

打开这个程序,不是很帅的程序,五个方块…

大家可以看到Mac程序中需要的各种尺寸的图标咯,怎么用呢?很简单拉~

拽一个图片进去就自动变成那个尺寸了,顺便说一下:试试png,别用jpg…

我知道这个长方的图标很2,我手头就是这个墙纸了…方格间可以随便拽~~

看到自己喜欢的尺寸了么?文件->保存成icon文件就可以咯!哇啦~~

收藏:魔兽3录像PHP解析器

曾几何时想弄一个类似Replay.net的某语言网站,但是我这人太孤单了,找不到合作伙伴阿… 算了,说正事

Warcraft III Replay Parser for PHP 是一个非常棒的w3录像文件解析器,如果你想使用服务器解析任何上传的replay文件的地图信息,比赛对手,等等等等所有的内容都是可访问的

http://w3rep.sourceforge.net/  有空看看!

w3g-julas-2.3 假使有一天那网站沉了,我这有备份!源文件的注释非常棒,大家要好好看看

慢慢肯定恢复iphone开发的话题,最近太忙太累了,身累心也累

iPhone的一些新书

APress看样是打算和iPhone开发biao上了,除了N本新书,而且品质异常的高。最近我太偷懒了,也是很忙,博客这又没弄了,有空将APress这些书的读书笔记写上来与大家分享

这么多水果,看样是对身体非常好咯~

期待APress更多的iPhone书籍,如果需要这些书,只需要google一下“书名+pdf”就会有惊喜哟!

博文重开,献上MyFodian 0.4的源代码

说来一个多月都没有更新自己的博客了,好多朋友都在支持我,鼓励我的博文,自己很开心。

生计的问题基本得到了解决,感情的问题也不再是问题(被人爱的感觉好阿!)所以之后一旦有时间是继续写博客。自己倒是没从开发中赚多少钱,但是希望大家有钱赚,希望大家从中获益就好。

我享受开发的乐趣!

噢,源代码MyFodian0.4 话说这个程序还是非常粗糙的,不过对于初学者来说会是一个不错的实例。大家自己如果想编译,记得先更改320库的位置。如果320库工作不正常,就要麻烦你们自己改改那个MockDataSource了,因为320的版本更新快,很多东西都有可能会不好用。

预告一下,很多朋友都提了问题,有空归纳一下然后一起回答~ 挑会的答,嘿嘿

生活,生计

短短几天感觉自己老了好几岁,由于心情不好,减了10斤肉(因祸得福… 吧)。最近恐怕要迫于生计干和学一些非Mac开发的东西了,有些是老课题了,Cisco。曾经的挑战以失败落幕,不过未来的挑战在胜利之前是不会有落幕的时刻。

不知道自己现在是为了爱情,还是为了生计,或是为了将来。不过一如既往的努力,和100%的工作是我现在需要的了。

在完全备考CCIE之前,《我的佛典》还是需要一个更新升级的,需要更好的使用本地存储来解决新数据载入的问题,所以Core Data还会是我的讨论主题和研究方向。如何简单的整理数据,以便方便的增量更新也是个问题。

今天非常开心有一位佛友发了eMail给我,教我“郭师兄”。师兄当然是称不上了,但是我非常非常开心。新版MyFodian一定要完成,而且要尽快完成!

数据类型/对象类型介绍(2)UINavigationController

UINavigationController iPhone导航控制器/导航栏 是在iPhone程序中广为使用的用户数据互动方式。

屏幕快照 2009-09-06 下午04.17.41

这是一个简单的导航栏截图,我们可以设置其内置UIView的title,而导航栏会显示出这个title。而不是设置导航栏的title。我们也可以设置其左侧,或者右侧的按钮或者自定义视图对象。我们下面来一步一步的看看导航栏的使用:

1,创建并使用一个UINavigationController

UINavigationController *aNav = [[UINavigationController alloc] init];

然后添加一个视图进去,否则导航栏也没有意义的

UIViewController *aView = [[UIView alloc] initWithNibName: (*xib文件名*)];
[aNav pushViewController:aView animated:NO];
//导航栏的第一个视图不要动画化

2,设置导航栏的左右按钮:
我说过,设置导航栏的按钮并不是去设置导航栏本身,而是当时被导航的视图控制器,比如我们对aView作设置。

设置其标题:

aView.title = @"标题";
 
//配置一个按钮,我这里是《我的佛典》上的代码
UIBarButtonItem *callModalViewButton = [[UIBarButtonItem alloc]
							initWithTitle:@"经文"
							style:UIBarButtonItemStyleBordered
							target:self
							action:@selector(callModalList)];
self.navigationItem.leftBarButtonItem = callModalViewButton;
[callModalViewButton release]; //由于本地视图会retain它,所以我们可以release了

可以看到,还是很简单的嘛。

3,其他常用方法和属性:

本地视图.navigationItem.leftBarButtonItem //左边栏项目
本地视图.navigationItem.rightBarButtonItem //右边栏项目
本地视图.navigationItem.backBarButtonItem //后退栏项目
本地视图.navigationItem.hidesBackButton //隐藏后退按钮(YES or NO)

作为iPhone开发中最常用的对象之一,还有很多内容值得挖掘,不过今天就到这里了。祝愿大家在iPhone编程之路上一路快走!

makeKeyAndVisible

我不知道为什么,不过有人搜索makeKeyAndVisible方法。其实我这种懒人一般不会刨根问底,有些方法照打就好,那些白给的方法有些就别动就好了。

我们看看这个每个程序都有的方法吧:

[window makeKeyAndVisible];

由于iPhone是单窗口程序,所以也就只有这么一个Window对象,而且是UIWindow,不是NSWindow。而根据文档上所说:

“这个是便捷方法,去使被使用对象的主窗口显示到屏幕的最前端。你也可以使用hiddenUIView方法隐藏这个窗口”

所以基本上来说,对于编程者的区别仅仅在于在其前添加代码,或在其后添加代码。

Three20添加方法(翻译)

Three20是一个iPhone开发图形接口类的集合,包含图片查看,一般工具,HTTP本地缓存。Three20是来自于Facebook的iPhone程序源代码的。

添加Three20到您的程序
==============================

Three20是预编译静态库,最简单的方法是使用Xcode的依赖工程特性,下面是方法:

1. 复制(Clone命令)three20 git(GitHub) 目录: `git clone git://github.com/joehewitt/three20.git`.  确保将其储存在一个常用位置,以便Xcode每次编译时来索引和访问

2. 在 “three20/src”中找到 “Three20.xcodeproj” . 拖拽Three20.xcodeproj到您工程的根目录”Groups and Files”边栏中.在弹出对话框中去掉”Copy items”的对号,”Reference Type”选择”Relative to Project”然后点“Add”.

3. 现在要链接Three20库到您的工程。点击添加进来的”Three20.xcodeproj”,在“Details”表中,你会看到 libThree20.a. 打上文件右侧的对号

4. 现在你需要设置320库为你程序的依赖库,以便Xcode在编译的时候也会将320一起编译起来。展开左侧的“Targets”标签,双击您程序的“目标”文件。在“General”标签下,你会看到“Direct Dependencies”,点“+”号添加320库。

5. 现在你需要添加图片和字符串包到你的程序,找到”Three20.bundle”在”three20/src”中,然后拖拽到你的程序中。对话框里面“Copy items”别选,“reference type”选“relative to project”

6. 现在,你需要添加 Core Animation framework到你的工程。点击程序target,然后在frameworks里面添加 QuartzCore.framework就可以了(这个不是翻译的,原来的方法太麻烦了

7. 最后,我们需要让你的工程找得到320库的文件头。打开 “Project Settings”找到”Build”标签,找到 “Header Search Paths”双击它。添加到”three20/src”相对目录的地址。

8. 当你在 Project Settings, 找到 “Other Linker Flags”在”Linker”区,添加”-ObjC”和”-all_load”。

9. 完活了,在用320库的地方添加 #import “Three20/Three20.h” 就好了。

在iPhone程序上读取PDF文件 (rev0.1 ^-^;)

老话,最近闹心的事情多,开心的事情少,但是正事还是要干的。学习得需要,努力的需要,钱的需要… … 天上给我下点儿钞票吧!


言归正传,怎么在iPhone程序中读取PDF的内容呢?答案是,苹果为我们准备了一个很神奇的framework Q2D(Quartz 2D)。Q2D提供了全套的PDF读取API,接下来我们来看看如果简单的使用Q2D来读取PDF文件:

我建立了一个工程叫iPhonePDF, 添加了一个UIScrollView(不知道怎么添加UIScrollView? 添加一个UIView然后把interface上的UIView改成UIScrollView就可以啦…)名为PDFView

看看PDFView里面有什么吧

@interface PDFView : UIScrollView {
 
	NSString *filePath;
	CGPDFDocumentRef pdfDocument;
	CGPDFPageRef page;
	int pageNumber;
}
 
@property (copy, nonatomic) NSString *filePath;
@property int pageNumber;
 
-(CGPDFDocumentRef)MyGetPDFDocumentRef;
-(void)reloadView;
-(IBAction)goUpPage:(id)sender;
-(IBAction)goDownPage:(id)sender;
@end

filePath是储存pdf文件的位置的,得到文件位置就是老话题了:[NSBundle mainBundle]… 后面的会写吧… 不记得了在我博客里面搜索吧

CGPDFDocumentRef是PDF文档索引文件,Q2D是Core Foundation的API,所以没看到那个星星~

CGPDFPageRef是PDF页面索引文件

pageNumber是页码

下面的几个函数其实一看就明了了,翻页的,和刷新页面的。第一个是自定义的getter

然后我们看看m文件里面有用的方法:

@implementation PDFView
@synthesize filePath,pageNumber;
 
- (void)drawRect:(CGRect)rect //只要是UIView都有的绘图函数,基础哟~
{
	if(filePath == nil) //如果没被初始化的话,就初始化
	{
		pageNumber = 10;   //这个其实应该由外部函数控制,不过谁让这个程序特别简单呢
		filePath = [[NSBundle mainBundle] pathForResource:@"zhaomu" ofType:@"pdf"];
                //这里,文件在这里!
		pdfDocument = [self MyGetPDFDocumentRef]; //从自定义getter得到文件索引
	}
 
	CGContextRef myContext = UIGraphicsGetCurrentContext();
        //这个我研究了一段时间呢,不过就照打就可以了
 
	page = CGPDFDocumentGetPage(pdfDocument, pageNumber);
        //便捷函数,告诉人家文档,告诉人家页码,就给你页面索引
 
	CGContextDrawPDFPage(myContext, page);
        //画!
}
 
//此getter可以考虑照打... 都是CF函数,我看到就恶心。
//其实不是很难了,得到文件,转换成URL,然后通过
//CGPDFDocumentCreateWithURL(url)得到文件内容索引
//Ta Daaa~~
- (CGPDFDocumentRef)MyGetPDFDocumentRef
{
	CFStringRef path;
	CFURLRef url;
	CGPDFDocumentRef document;
	path = CFStringCreateWithCString(NULL, [filePath UTF8String], kCFStringEncodingUTF8);
	url = CFURLCreateWithFileSystemPath(NULL, path, kCFURLPOSIXPathStyle, 0);
	CFRelease(path);
	document = CGPDFDocumentCreateWithURL(url);
	CFRelease(url);
	return document;
}
 
-(void)reloadView
{
	[self setNeedsDisplay]; //每次需要重画视图了,就call这个
}
 
-(IBAction)goUpPage:(id)sender
{
	pageNumber++;
 
	[self reloadView];
}
-(IBAction)goDownPage:(id)sender
{
	pageNumber--;
	[self reloadView];
}
@end

我这个是个少半成品的程序呢… 我当时弄了几个PDF测试程序,但是找不到了。不过意思是一样的,剩下的东西由大家来发挥吧,有问题记得留言噢!我有问必答!

与开发无关:魔兽世界,你还要害死多少人?

如果按照美国的规矩写文章,我恐怕就必须证明魔兽世界已经害死了多少人。但是我是中国人,我用中国字,我看到的是中国人能看到的。

是阿,魔兽世界不是唯一一个网络游戏,就算没有魔兽世界,在地球上还有那么多其他的网络游戏。但是这种假设没有必要,因为魔兽世界是现实存在的,而且已经害了很多人,我其实就是间接受害者。

不懂究竟魔兽世界有多好玩,不懂玩魔兽世界的人内心到底有多空虚。不懂魔兽世界究竟能带来怎样的快感,不懂魔兽玩家究竟能从中得到什么?我真是不懂阿!我没玩过?我玩过,为了学习其中宏怎么写,lua怎么用,但是最后发现不过是在帮wow害人而已。

是阿,我们的社会压力太大了,我们的家庭压力太大了,我们的学校压力太大了,该死的学习压力太大了。压力大还有很多方式方法来解决,压力大也不应该玩上就不停歇,压力再大这也是现实。魔兽中的一切的一切都是虚幻泡影,金币,银币,铜币,你最后真能用他们换来什么么?

醒来吧,醒来吧,不知道该用什么拯救你。醒来吧,醒来吧,现实还需要你来面对。