顯示具有 iPhone 標籤的文章。 顯示所有文章
顯示具有 iPhone 標籤的文章。 顯示所有文章

2011年10月4日 星期二

開發憑證 (Development Certificates)與發佈憑證 (Distribution Certificates)的製作

資料來源

發佈憑證 (Distribution Certificates) 就跟 開發憑證製作方法一樣


之後在Xcode中選 Product -> Archive 
即可產生.xcarchive的包裝檔.


可使用Xcode 4 之後的 Origanizer工具 進行submit 或 share (Ad Hoc)

2011年9月19日 星期一

FMDB 將 SQLite 包裝成類Object-C的物件

資料來源

簡單說就是到
這裡 下載Source Code
然後把src目錄下的都加到專案中..

使用方法就像使用一個Object-C物件那樣去操作DataBase...


另一個FMDB的介紹

再一個

其中有Transaction的建議作法
若要做executeUpdate的動作,前面要加個[_db beginTransaction];,然後再寫executeUpdate動作,最後再[_db commit];會比較好~

2011年9月8日 星期四

讓函式可以接收不定長度的參數

使用的方式、概念,
都跟 C++ 相同。


利用三個內建函式來取得資料:

1. va_start(<#ap#>, <#param#>)
2. va_arg(<#ap#>, <#type#>)
3. va_end(<#ap#>)

ap: argument pointer ,使用 va_list 宣告的型別
param: 最後一個接收到的指定參數
type: 指定所取得的參數是何種型別


ex:
[declaration]
-(NSMutableArray*) arguCollection:(NSString *) str, ...{
NSMutableArray *ret = [NSMutableArray new];

va_list argList;
NSString *get;

va_start(argList, str);
while ((get=va_arg(argList, NSString*))) {
[ret addObject:get];
}

return ret;

}

進入到函式裡時,
函式所接收到的參數們會收集在一個陣列裡,
以上面的例子來看,
就是長成這樣子 ->
[str, var_1, var_2, ..., var_N] 。

一使用 va_list 宣告
argList 時,
就會將
argList 指向這個陣列。

經過 va_start 執行後,
argList 指標就會指到 var_1 的位置,
所以要告訴 va_start 不定參數從哪開始時,
就得利用 str 這個變數來指定。

再用
va_arg 函式後,
即可取得資料了...

[test]
[
<#instance#> arguCollection:@"test", @"1", @"2", @"3", nil]

使用時最後面要給 nil ,
原因是為了讓 while 迴圈知道什麼時候該停止。


2011年9月5日 星期一

改變UIImage的顏色

資料來源

簡單說就是..底下的函式.
丟一個 UIImage進去,回傳一個填上顏色的UIImage回來


- (UIImage*)getRedImage:(UIImage*)img{
    UIGraphicsBeginImageContext(img.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
    CGContextTranslateCTM(context, 0, img.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGRect rect = CGRectMake(0, 0, img.size.width, img.size.height);
    CGContextDrawImage(context, rect, img.CGImage);
    CGContextClipToMask(context, rect, img.CGImage);
    CGContextAddRect(context, rect);
    CGContextDrawPath(context,kCGPathFill);
    UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return coloredImg;
}

2011年8月30日 星期二

Xcode TableView 設定

資料來源

基本的tableView 資料設定與使用就略過不提.

tableView可以分多項scetion,在各header分類時可以設定header來明顯標示出section的段落.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    //這邊return的就是各section上的header    return @"Header";
}

然後如果想在tableView右邊顯示index 可以快速跳越到某section.
加入底下的函式. 並自定各自要顯示的index的title
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    NSArray* sIndex = [[NSArray alloc] initWithObjects:@"0-9", @"A", @"中", @"日", @"法", @"德", nil];
    return 
[sIndex autorelease];
}

2011年7月31日 星期日

cocos2d Scene切換特效.

簡單記一下.方便查找..
原本用的是 [[CCDirector sharedDirectorpushScene:[SelectLayer scene]];
把後面的 的 scene替換掉. 改成.
    [[CCDirector sharedDirector] pushScene:
     [CCTransitionSlideInT transitionWithDuration:1.0f scene:[SelectLayer scene]]];
就可以有換景的特效..
除了 CCTransitionSlideInT
還有其他類似的可以用 都是 CCTransition... 開頭.

另外,如果是用 [[CCDirector sharedDirectorpopScene];
無法加上換景的特效.

要加特效的話要在 在 這裡 有人提出一個方法.
1. 修改 CCDirector.h,在 -(void)popScene 下加上
- (void) popSceneWithTransition: (Class)c duration:(ccTime)t;

2.修改 CCDirectior.m , 在 -(void)popScene下加上

-(void) popSceneWithTransition: (Class)transitionClass duration:(ccTime)t;
{
 NSAssert( runningScene_ != nil, @"A running Scene is needed");

 [scenesStack_ removeLastObject];
 NSUInteger c = [scenesStack_ count];
 if( c == 0 ) {
  [self end];
 } else {
  CCScene* scene = [transitionClass transitionWithDuration:t scene:[scenesStack_ objectAtIndex:c-1]];
  [scenesStack_ replaceObjectAtIndex:c-1 withObject:scene];
  nextScene_ = scene;
 }
}

3.用
[[CCDirector sharedDirector] popSceneWithTransition:[CCTransitionSlideInB class] duration:0.5f];

取代原本的 [[CCDirector sharedDirectorpopScene]; 指令即可.
其中的 [CCTransitionSlideInB class] 看需要什麼效果就替換上去.

2011年7月27日 星期三

(轉)App壓縮

由於3G上網下載限制在20M以內,
大家都會想辦法縮到這個範圍,
app大小不外乎是那些資源檔,
在網路上有找到一些方法,

裡面提到的圖片壓縮工具ImageOptim

2011年7月2日 星期六

2011年7月1日 星期五

cocos2d-particle粒子特效

最近在玩cocos2d內建的particle,
cocos2d的專案裡面有particle test範例可以參考,
但是那個參數看的眼花撩亂....
我都是憑感覺去亂調><
後來找到兩個很方便的工具,
可以視覺調整之後輸出參數,
先保留起來....有機會再玩玩它


2011年6月30日 星期四

cocos2d-用ccmenuitem建立button

CCMenuItem *_Btn = [[CCMenuItemImage itemFromNormalImage:@Img_Back //按鈕圖

selectedImage:@Img_BackSelect //click之後的圖

target:self

selector:@selector(Click_Reset:)] retain]; //觸發函數

CCMenu *menu2 = [CCMenu menuWithItems: _Btn, nil]; //建立選單

[self addChild: _Btn z:0];


以上是簡單的按鈕產生方式,

不知有沒有那種按著不放就觸發的方法?

我用愚人法做出來不知道有沒有更簡單的方式,
建立一個schedule跟BOOL開關還有一個rect,
ccTouchesBegan的時候就開啟BOOL,
ccTouchesEnded的時候關閉BOOL,
schedule裡面去判斷BOOL有沒有開啟再去做,

取得UIImage的圖素資料,對每一點做修改

簡單記一下.作法    

UIGraphicsBeginImageContext(imgView.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();


unsigned char* data = CGBitmapContextGetData (cgctx);




//offset locates the pixel in the data from x,y. 
//4 for 4 bytes of data per pixel, w is width of one row of data.
int offset = 4*((w*round(point.y))+round(point.x));

2011年6月29日 星期三

cocos2d-使用plist處理動畫

之前看的知易教學所使用的CCSpriteSheet好像已經不能使用了 (我用1.0.0-rc),
在網路上有找到一篇教學寫得很詳細,

iPhone 程式要間隔一段時間執行某個函式的方法

最基本的就是用NSTimer ..
只是這個要建一個 NSTimer 再做一些設定..
感覺有點麻煩..

有看到另一種方法.
[self performSelector:@selector(test:) withObject:nnil afterDelay:1.0];


2011年6月28日 星期二

cocos2D 使CCSprite可以觸發touch事件

參考來源

把TouchSprite 再改一下..讓它可以設定要執行的動作,這樣就跟用CCMenu差不多了

簡單的說就是,新增一個繼承CCSprite的類別,
且加入並實作 <CCTargetedTouchDelegate> 的協定 .
實作類別如下.


2011年6月27日 星期一

cocos2d-利用NSUserDefaults保存數值

有時候需要在不同的Scene運用某個變數時,
可以利用NSUserDefaults或是NSData保存起來在另外一個Scene運用,
這裡先只講NSUserDefaults的作法(因為我現在只用過這種XD)
//宣告
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

cocos2D 取得目前執行中的secne或layer

今天因為有需要從某些地方取得目前執行中的layer來做一些事,
所以找了一下作法,並記錄一下免得之後忘了.

[CCDirector sharedDirector]
的功能..
發現其中有一個是.
CCScene *runningSC = [[CCDirector sharedDirector] runningScene];

2011年6月23日 星期四

cocos2D中加入UIView

參考資料

這感覺跟之前的取得RootViewControll很接近..
不過 細部要做的事情.好像還是有一點點不同..

所以就順便記錄一下.之後再依情況使用了.

簡單說
就先建好 UIView 或子類別的元件後.
使用
[[[CCDirector sharedDirector] openGLView] addSubview:obj];
就可以把元件加到rootView上.

2011年6月22日 星期三

cocos2D 上的 ScrollView

資料來源

這位作者 givp ,有整理了一個簡單好用的類別.
CCScrollLayer 是一個CCLayer的子類別.
可以將一群CCLayer加入到CCScrollLayer內,

CCLayer 的內容可以附加Image , Label , Menu 等..

然後再將CCScrollLayer加到scene上.
如此便可方便的呈現出ScrollView效果

使用的方法很簡單.
1.將CCScrollLayer類別的所有檔案加到專案中
2.在scene中import CCScrollLayer.h
3.在scene的init時,設定每一個layer , 再將這群layers加到CCScrollLayer中

範例如下:

2011年6月21日 星期二

cocos2D 存取rootViewController

使用cocos2D 0.99.5 版

要存取RootViewController的方法:

1.
AppDelegate.h 設定 
@property (nonatomic, retain) RootViewController *viewController;
AppDelegate.m 設定
@synthesize viewController;