為了要客制化UIAlertView上網查了很多別人已經寫好的程式碼
老是看到這個方法
stretchableImageWithLeftCapWidth:topCapHeight:
很好奇這到底是用來幹嘛的
原來這方法上網看了別人的解釋是這樣的
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
这个函数是UIImage的一个实例函数,它的功能是创建一个内容可拉伸,而边角不拉伸的图片,需要两个参数,第一个是不拉伸区域和左边框的宽度,第二个参数是不拉伸区域和上边框的宽度。
第一次用这个函数的时候一直搞不懂为什么只要两个参数就行,至少应该指定左上角和右下角,总共四个参数啊。后来读读文档才明白,只需要两个参数就行了。
参数的意义是,如果参数指定10,5。那么,图片左边10个像素,上边5个像素。不会被拉伸,x坐标为11和一个像素会被横向复制,y坐标为6的一个像素会被纵向复制。注意:只是对一个像素进行复制到一定宽度。
其实就是对一个图像做处理,只将中间需要放大的部分进行缩放,而四个角不做拉伸,四个边只做单方向上的拉伸。这种技术通常用于创建可变宽度按钮,包邮相同圆角,但其中心区域的放大和缩小的需要。
用该函数设置UIButton的image时, 只对backgroundImage启作用
参数
leftCapWidth
要使用的值上限为左侧的宽度。指定0如果你不希望的形象是横向拉伸。
topCapHeight
要使用的值为顶盖的宽度。指定0如果你不希望的形象是垂直拉伸。
但是在iOS5.0以後就不能用這方法了囧
可以在iOS6.1也沒有報錯.我想應該還是可以繼續使用吧!
參考鏈結裡有更詳細的解釋我覺得很棒
stretchableImageWithLeftCapWidth:topCapHeight:函数用法
Translate
2013年3月14日 星期四
2013年3月13日 星期三
NSFileManager creat Folder
最近需要自己創個資料夾
放在app裡的document的資料夾裡面
上網查了資料
發現要使用NSFileManager來創資料夾
通常使用NSFileManager有兩種
NSFileManager* fileMag = [[NSFileManager alloc] init];
或直接使用
[NSFileManager defaultManager]
以下是直接使用[NSFileManager defaultManager]
主要使用到creat資料夾是用
放在app裡的document的資料夾裡面
上網查了資料
發現要使用NSFileManager來創資料夾
通常使用NSFileManager有兩種
NSFileManager* fileMag = [[NSFileManager alloc] init];
或直接使用
[NSFileManager defaultManager]
以下是直接使用[NSFileManager defaultManager]
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *fileFolder = [documentsPath stringByAppendingPathComponent:@"myRecord"];
// 如果資料夾不存在
if (![[NSFileManager defaultManager] fileExistsAtPath:fileFolder]){
NSError* error;
if([[NSFileManager defaultManager] createDirectoryAtPath:fileFolder withIntermediateDirectories:YES attributes:nil error:&error])
{
NSLog(@"success");
}
else
{
NSLog(@"[%@] ERROR: attempting to write create MyFolder directory", [self class]);
NSAssert( FALSE, @"Failed to create directory maybe out of disk space?");
}
}
else
{
// 資料夾存在
} 主要使用到creat資料夾是用
NSError* error;
[[NSFileManager defaultManager] createDirectoryAtPath:fileFolder withIntermediateDirectories:YES attributes:nil error:&error]
NSMutableDictionary setValue forKey crash
在某次我需要利用相同NSMutableDictionary來做key值的改變
並替換掉原本的NSMutableDictionary卻發現會crash
本來的寫法是
//list_data是陣列裡面包的是NSMutableDictionary
NSMutableDictionary *tag_dic = [list_data objectAtIndex:row];
[tag_dic setValue:[NSString stringWithFormat:@"%d",index_sound + 1] forKey:@"sound_order"];
就這樣crash掉了 囧 too bad!
後來上網找 發現只要這樣寫就可以了
NSMutableDictionary *tag_dic = [[list_data objectAtIndex:row] mutableCopy];
[tag_dic setValue:[NSString stringWithFormat:@"%d",index_sound + 1] forKey:@"sound_order"]; 真是太神奇了傑克!
並替換掉原本的NSMutableDictionary卻發現會crash
本來的寫法是
//list_data是陣列裡面包的是NSMutableDictionary
NSMutableDictionary *tag_dic = [list_data objectAtIndex:row];
[tag_dic setValue:[NSString stringWithFormat:@"%d",index_sound + 1] forKey:@"sound_order"];
就這樣crash掉了 囧 too bad!
後來上網找 發現只要這樣寫就可以了
NSMutableDictionary *tag_dic = [[list_data objectAtIndex:row] mutableCopy];
[tag_dic setValue:[NSString stringWithFormat:@"%d",index_sound + 1] forKey:@"sound_order"]; 真是太神奇了傑克!
2013年3月11日 星期一
NSUserDefaults
引用
http://gibuloto.com/blog/nsuserdefaults/
重點是
在設定完之後記得要
[[NSUserDefaults standardUserDefaults] synchronize];
NSUserDefaults 可以用來儲存使用者的偏好設定(它會被存成一個 .plist 檔案),你可以把它想成是 iOS app 的 localStorage,而且 NSUserDefaults 不只可以儲存字串,還可以儲存任何 Objective-C data type。
使用方法
http://gibuloto.com/blog/nsuserdefaults/
重點是
在設定完之後記得要
[[NSUserDefaults standardUserDefaults] synchronize];
NSUserDefaults 可以用來儲存使用者的偏好設定(它會被存成一個 .plist 檔案),你可以把它想成是 iOS app 的 localStorage,而且 NSUserDefaults 不只可以儲存字串,還可以儲存任何 Objective-C data type。
使用方法
// 你得先宣告一個 NSUserDefaults 物件,在同一個 app 裡,它是 singleton(單例)
NSUserDefaults *userPrefs = [NSUserDefaults standardUserDefaults];
// set
[userPrefs setObject:@"a123456789" forKey:@"userID"];
[userPrefs setInteger:24 forKey:@"age"];
[userPrefs setBool:YES forKey:@"isLogin"];
// remove
[userPrefs removeObjectForKey:@"debts"];
[userPrefs synchronize];
// get
NSString *userID = [userPrefs stringForKey:@"userID"];
BOOL isLogin = [userPrefs boolForKey:@"isLogin"]; 要注意的是,set 或 remove 之後,記得執行 [userPrefs synchronize],已確保資料被寫入硬碟裡。再保險一點,你還可以:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
/*
Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
*/
[[NSUserDefaults standardUserDefaults] synchronize];
}
2013年3月7日 星期四
FMDB ld: 1 duplicate symbol for architecture armv7s
今天第一次使用FMDB之前都是用舊公司的DB讀取資料
一開始先加入
libsqlite3.0.dylib的資料庫
再加入FMDB的src
FMDatabase.h
FMDatabase.m
FMDatabaseAdditions.h
FMDatabaseAdditions.m
fmdb.m
FMResultSet.h
FMResultSet.m
沒想到在compile的時候報錯
訊息為
duplicate symbol _main in:
/Users/apple/Library/Developer/Xcode/DerivedData/DogCam-cvhwautedscftlgteittuievolks/Build/Intermediates/DogCam.build/Debug-iphoneos/DogCam.build/Objects-normal/armv7s/main.o
/Users/apple/Library/Developer/Xcode/DerivedData/DogCam-cvhwautedscftlgteittuievolks/Build/Intermediates/DogCam.build/Debug-iphoneos/DogCam.build/Objects-normal/armv7s/fmdb.o
ld: 1 duplicate symbol for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
後來發現只要移除fmdb.m檔就好了
然後引用標題檔
#import "FMDatabase.h"
一開始先加入
libsqlite3.0.dylib的資料庫
再加入FMDB的src
FMDatabase.h
FMDatabase.m
FMDatabaseAdditions.h
FMDatabaseAdditions.m
fmdb.m
FMResultSet.h
FMResultSet.m
沒想到在compile的時候報錯
訊息為
duplicate symbol _main in:
/Users/apple/Library/Developer/Xcode/DerivedData/DogCam-cvhwautedscftlgteittuievolks/Build/Intermediates/DogCam.build/Debug-iphoneos/DogCam.build/Objects-normal/armv7s/main.o
/Users/apple/Library/Developer/Xcode/DerivedData/DogCam-cvhwautedscftlgteittuievolks/Build/Intermediates/DogCam.build/Debug-iphoneos/DogCam.build/Objects-normal/armv7s/fmdb.o
ld: 1 duplicate symbol for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
後來發現只要移除fmdb.m檔就好了
然後引用標題檔
#import "FMDatabase.h"
AVAudioPlayer play mp3 and replay
use
AVAudioPlayer need add AVFoundation.framework!
and
#import <AVFoundation/AVFoundation.h>
AVAudioPlayer Notification issue: delegate- audioPlayerDidFinishPlaying:successfully
AVAudioPlayer *player;
播放mp3
AVAudioPlayer need add AVFoundation.framework!
and
#import <AVFoundation/AVFoundation.h>
AVAudioPlayer Notification issue: delegate- audioPlayerDidFinishPlaying:successfully
AVAudioPlayer *player;
播放mp3
NSString *fileName = @"test";
NSURL *url = [[NSURL alloc] initFileURLWithPath:
[[NSBundle mainBundle] pathForResource:fileName ofType:@"mp3"] isDirectory:NO];
NSError* error = nil;
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
player.delegate = self;
if (!url || error) {
}
player.volume = 1;
player.numberOfLoops = -1;// -1 = repeat forever
[player prepareToPlay];
[player play];
pause
if([player isPlaying])
{
[player pause];
player = nil;
}
#pragma mark -
#pragma mark AVAudioPlayer delegate
- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *)aPlayer successfully: (BOOL)flag
{
if (flag == YES) {
NSLog(@"audioPlayerDidFinishPlaying");
}
}
DMCircularScrollView Crash
在新公司用需要用到一各比較特別的UI
上網查了查發現這個很適合專案要的感覺
沒想到用了四五個小時卻一直當掉
找不出原因
只好把整個網址上網google沒想到

真的是太蝦了拉
原來要ARC的專案
可是我的專案沒有支援ARC
上網找了一下發現在
[iOS筆記]部份檔案使用/不使用ARC
借我引用一下重點
在專案的TARGETS->Bulid Phases->Compile Sources
選擇不要的.m在Compile Flags設定-fobjc-arc
搞定可以運行了
引用一下
1. 你的專案使用 ARC, 但希望部份檔案不使用,則使用 -fno-objc-arc。
2. 如果你的專案不使用 ARC, 但部份檔案使用,則用 -fobjc-arc。
上網查了查發現這個很適合專案要的感覺
沒想到用了四五個小時卻一直當掉
找不出原因
只好把整個網址上網google沒想到

真的是太蝦了拉
原來要ARC的專案
可是我的專案沒有支援ARC
上網找了一下發現在
[iOS筆記]部份檔案使用/不使用ARC
借我引用一下重點
在專案的TARGETS->Bulid Phases->Compile Sources
選擇不要的.m在Compile Flags設定-fobjc-arc
搞定可以運行了
引用一下
1. 你的專案使用 ARC, 但希望部份檔案不使用,則使用 -fno-objc-arc。
2. 如果你的專案不使用 ARC, 但部份檔案使用,則用 -fobjc-arc。
訂閱:
文章 (Atom)