? 轉(zhuǎn)載自cocoaChina http://www.cocoachina.com/bbs/read.php?tid-73570.html??? 記錄以備用
iphone程序中實(shí)現(xiàn)截屏的一種方法
在iphone程序中實(shí)現(xiàn)截屏的一種方法:
//導(dǎo)入頭文件
#import QuartzCore/QuartzCore.h
//將整個(gè)self.view大小的圖層形式創(chuàng)建一張圖片image UIGraphicsBeginImageContext(self.view.bounds.size)盯荤;
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]底靠;
UIImage*image=UIGraphicsGetImageFromCurrentImageContext()斩熊;
UIGraphicsEndImageContext()朝墩;
//然后將該圖片保存到圖片圖
UIImageWriteToSavedPhotosAlbum(image,self,nil,nil);
1.顏色和字體
UIKit提供了UIColor和UIFont類來進(jìn)行設(shè)置顏色和字體沫换,
UIColor *redColor=【UIColor redColor】劫拗;
【redColor set】辜妓;//設(shè)置為紅色
UIFont *front=【UIFont systemFontOfSize:14.0】;//獲得系統(tǒng)字體
【myLable setFont:font】碌宴;//設(shè)置文本對(duì)象的字體
2.drawRect方法
對(duì)于畫圖杀狡,你首先需要重載drawRect方法,然后調(diào)用setNeedsDisplay方法讓系統(tǒng)畫圖:
-(void)drawRect:(CGRect)rect;//在rect指定的區(qū)域畫圖
-(void)setNeedsDisplay贰镣;//讓系統(tǒng)調(diào)用drawRect畫圖
延時(shí)函數(shù)和Timer的使用
延時(shí)函數(shù):
[NSThread sleepForTimeInterval:5.0]呜象;//暫停5s.
Timer的使用:
NSTimer *connectionTimer;//timer對(duì)象
//實(shí)例化timer
self.connectionTimer=[NSTimerscheduledTimerWithTimeInterval:1.5 target:selfselector:@selector(timerFired:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop]addTimer:self.connectionTimer forMode:NSDefaultRunLoopMode];
//用timer作為延時(shí)的一種方法
do{
[[NSRunLoopcurrentRunLoop]runUntilDate:[NSDatedateWithTimeIntervalSinceNow:1.0]];
}while(!done);
//timer調(diào)用函數(shù)
-(void)timerFired:(NSTimer *)timer{
done =YES;
}
啟動(dòng)界面的制作
iPhone開發(fā)實(shí)現(xiàn)splash畫面非常簡(jiǎn)單,做一個(gè)全屏的歡迎頁的圖片碑隆,把它命名為Default.png恭陡,然后放在Xcode工程的Resource里面。
在XXXAppDelegate.m程序中上煤,插入如下代碼:
-(BOOL)application:(UIApplication*)application
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{
//–inserta delay of 5 seconds before the splash screendisappears–
[NSThread?sleepForTimeInterval:5.0];
//Override point for customization after applicationlaunch.
//Add the view controller’s view to the window anddisplay.
[windowaddSubview:viewController.view];
[windowmakeKeyAndVisible];
returnYES;
}
這樣splash頁面就停留5秒后休玩,消失了。
關(guān)于控制器Controller的思考
iPhone開發(fā)中,只有一個(gè)窗口拴疤,對(duì)應(yīng)的是多個(gè)視圖永部,而視圖的組織形式各種各樣,關(guān)鍵是要靠控制器來組織各個(gè)視圖的邏輯關(guān)系呐矾。大體的關(guān)系如下:
窗體---主控制器(比如說導(dǎo)航控制器)苔埋,主控制器在窗體里面,拖動(dòng)過去即可蜒犯,在AppDelegate中寫相關(guān)變量的代碼---在主控制器下有別的控制器组橄,比如視圖控制器,可以通過interfacebuilder來關(guān)聯(lián)根視圖什么的----視圖控制器相當(dāng)于一個(gè)根視圖罚随,可以調(diào)用其他的視圖---視圖中包含類文件(.h,.m)和圖形界面文件(.xib)(兩個(gè)之間必須關(guān)聯(lián)起來玉工。)
翻頁效果
經(jīng)常看到iPhone的軟件向上向下翻頁面的效果淘菩,其實(shí)這個(gè)很簡(jiǎn)單遵班,已經(jīng)有封裝好的相關(guān)方法處理。
//首先設(shè)置動(dòng)畫的相關(guān)參數(shù)
[UIView beginAnimations:@"Curl"context:nil];
[UIView setAnimationDuration:1.25];//時(shí)間
[UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut];//速度
//然后設(shè)置動(dòng)畫的動(dòng)作和目標(biāo)視圖
[UIViewsetAnimationTransition:UIViewAnimationTransitionCurlUpforView:self.viewcache:YES];
參數(shù)UIViewAnimationTransitionCurlUp代表向上翻頁瞄勾,如果向下的話UIViewAnimationTransitionCurlDown.
forView那把當(dāng)前的視圖傳進(jìn)去。
//最后提交動(dòng)畫
[UIView commitAnimations];
截取屏幕圖片
//創(chuàng)建一個(gè)基于位圖的圖形上下文并指定大小為CGSizeMake(200,400)
UIGraphicsBeginImageContext(CGSizeMake(200,400));
//renderInContext 呈現(xiàn)接受者及其子范圍到指定的上下文
[self.view.layerrenderInContext:UIGraphicsGetCurrentContext()];
//返回一個(gè)基于當(dāng)前圖形上下文的圖片
UIImage *aImage =UIGraphicsGetImageFromCurrentImageContext();
//移除棧頂?shù)幕诋?dāng)前位圖的圖形上下文
UIGraphicsEndImageContext();
//以png格式返回指定圖片的數(shù)據(jù)
imageData = UIImagePNGRepresentation(aImage);
使用NSTimer與iphone的簡(jiǎn)單動(dòng)畫弥激,實(shí)現(xiàn)飄雪效果
使用NSTimer與iphone的簡(jiǎn)單動(dòng)畫进陡,實(shí)現(xiàn)飄雪效果,這理原理比較簡(jiǎn)單微服,就是定時(shí)生成一定的雪花圖片趾疚,然后使用動(dòng)畫的方式向下漂落(我在其它論壇,看到使用path的方式實(shí)現(xiàn)的一個(gè)云漂來漂去的效果以蕴,實(shí)際也可以用那種方式實(shí)現(xiàn)糙麦,這實(shí)際就是前面說的動(dòng)畫效果的兩種應(yīng)用)。所以丛肮,我們可以在 viewDidLoad事件中赡磅,增加一個(gè)圖片及定時(shí)器并啟動(dòng),這里的pic請(qǐng)?jiān)陬^文件中定義。
-(void)viewDidLoad{
[super viewDidLoad];
self.pic = [UIImage imageNamed:@"snow.png"];//初始化圖片
//啟動(dòng)定時(shí)器宝与,實(shí)現(xiàn)飄雪效果
[NSTimer scheduledTimerWithTimeInterval:(0.2) target:self selector:@selector(ontime) userInfo:nil repeats:YES];
}
然后再實(shí)現(xiàn)定時(shí)器定時(shí)調(diào)用的ontime方法:
-(void)ontime{
UIImageView *view = [[UIImageView alloc] initWithImage:pic];//聲明一個(gè)UIImageView對(duì)象焚廊,用來添加圖片
view.alpha = 0.5;//設(shè)置該view的alpha為0.5,半透明的
int x = round(random()%320);//隨機(jī)得到該圖片的x坐標(biāo)
int y = round(random()%320);//這個(gè)是該圖片移動(dòng)的最后坐標(biāo)x軸的
int s = round(random()%15)+10;//這個(gè)是定義雪花圖片的大小
int sp = 1/round(random()%100)+1;//這個(gè)是速度
view.frame = CGRectMake(x, -50, s, s);//雪花開始的大小和位置
[self.view addSubview:view];//添加該view
[UIView beginAnimations:nil context:view];//開始動(dòng)畫
[UIView setAnimationDuration:10*sp];//設(shè)定速度
view.frame = CGRectMake(y, 500, s, s);//設(shè)定該雪花最后的消失坐標(biāo)
[UIView setAnimationDelegate:self];
[UIView commitAnimations];
}
使用NSTimer實(shí)現(xiàn)倒計(jì)時(shí)
今天在CocoaChina上面看到有人在問倒計(jì)時(shí)怎么做习劫,記得以前在看Iphone31天的時(shí)候做過一個(gè)咆瘟,今天翻出來運(yùn)行不了了,原因是我的IphoneSDK升級(jí)到3.1了诽里,以前使用的是2.2.1袒餐,在2.2.1里面是可以使用NSCalendarDate的,但是在3.1里面不能夠使用,怎么辦灸眼,只好用NSTimer了卧檐,最后還是給實(shí)現(xiàn)了。代碼也比較簡(jiǎn)單幢炸,開始運(yùn)行viewDidLoad的時(shí)候加載?[NSTimerscheduledTimerWithTimeInterval:1.0 target:selfselector:@selector(timerFireMethod:) userInfo:nilrepeats:YES];//使用timer定時(shí)泄隔,每秒觸發(fā)一次
,然后就是寫selector了宛徊。
-(void)timerFireMethod:(NSTimer*)theTimer
{
//NSDateFormatter *dateformatter =[[[NSDateFormatter alloc]init]autorelease];//定義NSDateFormatter用來顯示格式
//[dateformatter setDateFormat:@"yyyy MM dd hh mmss"];//設(shè)定格式
NSCalendar *cal = [NSCalendarcurrentCalendar];//定義一個(gè)NSCalendar對(duì)象
NSDateComponents *shibo = [[NSDateComponentsalloc] init];//初始化目標(biāo)時(shí)間(好像是世博會(huì)的日期)
[shibo setYear:2010];
[shibo setMonth:5];
[shibo setHour:8];
[shibo setMinute:0];
[shibo setSecond:0];
NSDate *todate = [caldateFromComponents:shibo];//把目標(biāo)時(shí)間裝載入date
[shibo release];
//?NSString *ssss = [dateformatterstringFromDate:dd];
//?NSLog([NSString stringWithFormat:@"shiboshi:%@",ssss]);
NSDate *today = [NSDate date];//得到當(dāng)前時(shí)間
//?NSString *sss = [dateformatterstringFromDate:today];
//?NSLog([NSString stringWithFormat:@"xianzaishi:%@",sss]);
//用來得到具體的時(shí)差
unsigned int unitFlags = NSYearCalendarUnit |NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit |NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *d = [cal components:unitFlagsfromDate:today toDate:todate options:0];
lab.text = [NSStringstringWithFormat:@"%d年%d月%d日%d時(shí)%d分%d秒",[d year],[d month], [d day],[d hour], [d minute], [d second]];
}
這樣就實(shí)現(xiàn)了倒計(jì)時(shí)的功能佛嬉。
Iphone幻燈片效果+背景音樂
今天弄了幾張好看的圖片,我就摸索著實(shí)現(xiàn)了圖片的幻燈片效果闸天,這個(gè)以前也實(shí)現(xiàn)過了暖呕,也算是溫故知新吧,另外就是使用SoundEngine類實(shí)現(xiàn)背景音樂的播放苞氮。SoundEngine類可以從[url=read.php?tid-1215.html]http://www.cocoachina.com/bbs/read.php?tid-1215.html[/url]下載到湾揽。
代碼很簡(jiǎn)單貼出來,以備不時(shí)只需:
-(void)viewDidLoad
{
array = [[NSMutableArray alloc] init];
int i = 1;
for(i;i<=30;i++)
{
[array addObject:[UIImageimageNamed:[NSString stringWithFormat:@"%d.jpg",i]]];
}
pictures.animationImages = array;
pictures.animationDuration = 300;//時(shí)間間隔
pictures.animationRepeatCount = 0;//循環(huán)播放
[pictures startAnimating];//開始播放
//播放背景音樂笼吟,利用SoundEngine類進(jìn)行播放
SoundEngine_SetListenerPosition(0.0, 0.0,1.0);
SoundEngine_Initialize(44100);
SoundEngine_LoadBackgroundMusicTrack([[[NSBundlemainBundle] pathForResource:@"win" ofType:@"caf"] UTF8String],true, true);
SoundEngine_StartBackgroundMusic();
}
NSTimer的用法
iPhone為我們提供了一個(gè)很強(qiáng)大得時(shí)間定時(shí)器 NSTimer库物,它可以完成任何定時(shí)功能:
我們使用起來也很簡(jiǎn)單,只要記住三要素就可以贷帮,具體得三要素是:時(shí)間間隔NSTimeInterval浮點(diǎn)型戚揭,事件代理delegate和事件處理方法@selector();
就可以用
1+(NSTimer*)scheduledTimerWithTimeIn
2terval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;[/pre]來初始化一個(gè) 時(shí)間定時(shí)器
下面我寫了一個(gè)很簡(jiǎn)單得例子:
-(void)initTimer
{
//時(shí)間間隔4NSTimeInterval timeInterval=1.0;
//定時(shí)器6NSTimer?? showTimer=[NSTimer scheduledTimerWithTimeInterval:maxShowTime
target:self
selector:@selector(handleMaxShowTimer:)
userInfo:nil
repeats:NO];
}
//觸發(fā)事件13-(void)handleMaxShowTimer:(NSTimer*)theTimer
{
NSDateFormatter dateFormator=[[NSDateFormatter alloc] init];
dateFormator.dateFormat=@"yyyy-MM-dd??HH:mm:ss";
NSString*date=[dateformater stringFromDate:[NSDate date]];
if([date isEqualToString:@"2010-11-09 23:59:59"])
{
UIAlertView*alert=[[UIAlertView alloc] initWithTitle:TITLE_NAME
message:@"現(xiàn)在馬上就有新的一天了撵枢!"22delegate:self
cancelButtonTitle:nil
otherButtonTitles:CONFIRM_TITLE, nil];
[alert show];
[alert release];
}
[data release];
[dateFormator release];
}
iphone 學(xué)習(xí)筆記
1民晒。隱藏狀態(tài)欄[[UIApplicationsharedApplication]setStatusBarHidden:YES];
/******************************************************************************
1、取隨機(jī)數(shù):
NSData*datanow = [NSDatadata];
inti = (int)datanow;
srand(i);
rand();
//int effectPicNum = rand()%7;
******************************************************************************/
/******************************************************************************
2锄禽、播放音樂:
-(void) playMusic
{
@try{
//取文件路徑
NSString*musicFilePath = [[NSBundlemainBundle]pathForResource:@"startLogo"ofType:@"mp3"];
NSURL*musicURL = [[NSURLalloc]initFileURLWithPath:musicFilePath];
musicPlayer= [[AVAudioPlayeralloc]initWithContentsOfURL:musicURLerror:nil];
[musicURLrelease];
//[musicPlayer prepareToPlay];
//[musicPlayer setVolume:1];? ? ? ? ? ? //設(shè)置音量大小
musicPlayer.numberOfLoops=0;//設(shè)置播放次數(shù)潜必,-1為一直循環(huán),0為一次
[musicPlayerplay];
}
@catch(NSException* e) {
}
}
******************************************************************************/
/******************************************************************************
3沃但、每隔0.8秒執(zhí)行timeCount方法:
NSTimer*countTimer;
countTimer= [NSTimerscheduledTimerWithTimeInterval:0.8target:selfselector:@selector(timeCount:)userInfo:nilrepeats:YES];
[countTimerfire];//執(zhí)行timer
******************************************************************************/
/******************************************************************************
4磁滚、延遲1秒執(zhí)行test方法:
[selfperformSelector:@selector(test)withObject:nilafterDelay:0.1];
******************************************************************************/
/******************************************************************************
5、啟動(dòng)線程:
[NSThreaddetachNewThreadSelector:@selector(transImage)toTarget:selfwithObject:nil];
timer=[NSTimerscheduledTimerWithTimeInterval:0.03target:selfselector:@selector(TimerClock:)userInfo:nilrepeats:YES];//啟動(dòng)一個(gè)NSTimer執(zhí)行廣播
[timerfire];//執(zhí)行timer
-(void)TimerClock:(id)sender
{
//控制延遲觸發(fā)
if(Timecontrol>1) {
[timerConditionbroadcast];//廣播宵晚,觸發(fā)處于等待狀態(tài)的timerCondition
}
}
-(void)transImage
{
isRunning=YES;
while(countTime
[timerConditionwait];
lim+=255/ (2*KFrame);
[selfprocessImage];
countTime+=1000/KFrame;
}
[timerinvalidate];
isRunning=NO;
}
******************************************************************************/
/******************************************************************************
6恨旱、獲取文件路徑:
//通過NSHomeDirectory獲得文件路徑
NSString*homeDirectory =NSHomeDirectory();
NSString*fileDirectory = [homeDirectorystringByAppendingPathComponent:@"temp/app_data.plist"];
//使用NSSearchPathForDirectoriesInDomains檢索指定路徑
NSArray*path =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
//常量NSDocumentDirectory表示正在查找Documents目錄的路徑(使用NSCachesDirectory表明要查找的時(shí)Caches文件夾),常量NSUserDomainMask表明我們希望將搜索限制于我們應(yīng)用程序的沙盒坝疼,最后一個(gè)參數(shù)決定了是否“展開”波浪線符號(hào)搜贤。
//在Mac系統(tǒng)中,‘~’表示主路經(jīng)(Home)钝凶,如果不展開仪芒,路徑看起來就是:‘~/Documents’,展開后即得到完整路徑唁影。這個(gè)參數(shù)一直設(shè)置位真即可。
NSString*documentsDirectory = [pathsobjectAtIndex:0];z
NSString*fileDirectory = [documentsDirectorystringByAppendingPathComponent:@"file.txt"];
//使用Foundation中的NSTemporaryDirectory函數(shù)直接返回代表temp文件夾的全路徑的字符串對(duì)象
NSString*tempDirectory =NSTemporaryDirectory();
NSString*file = [tempDirectorystringByAppendingPathComponent:@"file.txt"];
Example:
NSArray*path =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString*docDir = [pathobjectAtIndex:0];
NSLog(@"filepath:%@",docDir);
NSString*str =@"hello.jpg";
NSString*filepath = [docDirstringByAppendingPathComponent:str];
//NSString *filepath = [docDir stringByAppendingPathComponent:[NSString stringWithUTF8String:"http:///mest.txt"]];
NSLog(@"filepath:%@",filepath);
BOOLsuccess = [[NSFileManagerdefaultManager]createFileAtPath: filepathcontents:nilattributes:nil];
NSLog(@"result",success);
printf("Create File:%s %s.",[filepathUTF8String], success ?"Success":"Error");
NSString* reValue= [NSStringstringWithString:@"\"success\""];
NSLog(reValue);
******************************************************************************/
/************************************************************************************************************************************************************
7文件掂名、文件夾操作
//如果"/Documents/Theme"路徑不存在据沈,則創(chuàng)建。
if(![[NSFileManagerdefaultManager]fileExistsAtPath:themePath])
{
[[NSFileManagerdefaultManager]createDirectoryAtPath:themePathattributes:nil];
}
//刪除已存在的同名文件夾
if([[NSFileManagerdefaultManager]fileExistsAtPath:savePath]) {
[[NSFileManagerdefaultManager]removeItemAtPath:savePatherror:NULL];
}
************************************************************************************************************************************************************/
/************************************************************************************************************************************************************
7?子線程拋給主線程:
[selfperformSelectorOnMainThread:@selector(shiftView)withObject:nilwaitUntilDone:YES];
************************************************************************************************************************************************************/
/************************************************************************************************************************************************************
8獲取當(dāng)前時(shí)間
NSDateFormatter*formatter = [[NSDateFormatteralloc]init];
[formattersetDateFormat:@"yyyy-MM-dd hh:mm:ss"];
NSString*locationString=[formatterstringFromDate: [NSDatedate]];
//獲取當(dāng)前時(shí)間作為productId
NSDateFormatter*formatter = [[NSDateFormatteralloc]init];
[formattersetDateFormat:@"hhmmss"];
NSString*locationString=[formatterstringFromDate: [NSDatedate]];
downloadInfo.productId = locationString;
[formatterrelease];
/******************************************************************************
函數(shù)名稱? : getDate
函數(shù)描述? : 獲取當(dāng)前日期時(shí)間
輸入?yún)?shù)? : N/A
輸出參數(shù)? : N/A
返回值? ? : NSString 當(dāng)前時(shí)間
備注 ? ? :
******************************************************************************/
-(NSString*)getDate
{
NSDateFormatter*formatter = [[NSDateFormatteralloc]init];
[formattersetDateFormat:@"yyyy-MM-dd EEEE HH:mm:ss a"];
NSString*locationString=[formatterstringFromDate: [NSDatedate]];
[formatterrelease];
returnlocationString;
}
大寫的H日期格式將默認(rèn)為24小時(shí)制饺蔑,小寫的h日期格式將默認(rèn)為12小時(shí)
不需要特別設(shè)置锌介,只需要在dataFormat里設(shè)置類似"yyyy-MMM-dd"這樣的格式就可以了
日期格式如下:
y??年??Year??1996; 96
M??年中的月份??Month??July; Jul; 07
w??年中的周數(shù)??Number??27
W??月份中的周數(shù)??Number??2
D??年中的天數(shù)??Number??189
d??月份中的天數(shù)??Number??10
F??月份中的星期??Number??2
E??星期中的天數(shù)??Text??Tuesday; Tue
a??Am/pm 標(biāo)記??Text??PM
H??一天中的小時(shí)數(shù)(0-23)??Number??0
k??一天中的小時(shí)數(shù)(1-24)??Number??24
K??am/pm 中的小時(shí)數(shù)(0-11)??Number??0
h??am/pm 中的小時(shí)數(shù)(1-12)??Number??12
m??小時(shí)中的分鐘數(shù)??Number??30
s??分鐘中的秒數(shù)??Number??55
S??毫秒數(shù)??Number??978
z??時(shí)區(qū)??General time zone??Pacific Standard Time; PST; GMT-08:00
Z??時(shí)區(qū)??RFC 822 time zone??-0800
************************************************************************************************************************************************************/
/************************************************************************************************************************************************************
讀取和寫入plist文件
plist文件是標(biāo)準(zhǔn)的xml文件,在cocoa中可以很簡(jiǎn)單地使用猾警。這里介紹一下使用方法: 以下代碼在Mac和iPhone中均適用孔祸。
寫入plist文件: NSMutableDictionary * dict = [ [NSMutableDictionaryalloc ] initWith
plist文件是標(biāo)準(zhǔn)的xml文件,在cocoa中可以很簡(jiǎn)單地使用发皿。這里介紹一下使用方法:
以下代碼在Mac和iPhone中均適用崔慧。
寫入plist文件:
NSMutableDictionary* dict = [ [NSMutableDictionaryalloc ]initWithContentsOfFile:@"/Sample.plist"];
[ dictsetObject:@"Yes"forKey:@"RestartSpringBoard"];
[ dictwriteToFile:@"/Sample.plist"atomically:YES];
讀取plist文件:
NSMutableDictionary* dict =? [ [NSMutableDictionaryalloc ]initWithContentsOfFile:@"/Sample.plist"];
NSString* object = [ dictobjectForKey:@"RestartSpringBoard"];
************************************************************************************************************************************************************/
UIView翻轉(zhuǎn)效果實(shí)現(xiàn)
新建一個(gè)view-based模板工程,在ViewController文件中添加下面的代碼穴墅,即可實(shí)現(xiàn)翻轉(zhuǎn)效果惶室;
- (void)viewDidLoad {
[super viewDidLoad];
//需要翻轉(zhuǎn)的視圖
UIView *parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 150, 320, 200)];
parentView.backgroundColor = [UIColor yellowColor];
parentView.tag = 1000;
[self.view addSubview:parentView];
}
//需要在h頭文件聲明下面的動(dòng)作響應(yīng)函數(shù)
//在xib文件中添加一個(gè)button,其響應(yīng)函數(shù)為下面的函數(shù)
//運(yùn)行程序后玄货,點(diǎn)擊button就看到翻轉(zhuǎn)效果
-(IBAction)ActionFanzhuan{
//獲取當(dāng)前畫圖的設(shè)備上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//開始準(zhǔn)備動(dòng)畫
[UIView beginAnimations:nil context:context];
//設(shè)置動(dòng)畫曲線皇钞,翻譯不準(zhǔn),見蘋果官方文檔
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//設(shè)置動(dòng)畫持續(xù)時(shí)間
[UIView setAnimationDuration:1.0];
//因?yàn)闆]給viewController類添加成員變量松捉,所以用下面方法得到viewDidLoad添加的子視圖
UIView *parentView = [self.view viewWithTag:1000];
//設(shè)置動(dòng)畫效果
[UIView setAnimationTransition: UIViewAnimationTransitionCurlDown forView:parentView cache:YES]; ?//從上向下
// [UIView setAnimationTransition: UIViewAnimationTransitionCurlUp forView:parentView cache:YES]; ? //從下向上
// [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:parentView cache:YES]; ?//從左向右
// [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:parentView cache:YES];//從右向左
//設(shè)置動(dòng)畫委托
[UIView setAnimationDelegate:self];
//當(dāng)動(dòng)畫執(zhí)行結(jié)束夹界,執(zhí)行animationFinished方法
[UIView setAnimationDidStopSelector:@selector(animationFinished:)];
//提交動(dòng)畫
[UIView commitAnimations];
}
//動(dòng)畫效果執(zhí)行完畢
- (void) animationFinished: (id) sender{
NSLog(@"animationFinished !");
}
運(yùn)行程序,點(diǎn)擊按鈕惩坑,就能看到動(dòng)畫效果了掉盅。
[ 此帖被haoxue在2012-02-25 22:01重新編輯 ]
痛定思痛也拜,人要知恥而后勇以舒!
級(jí)別: 精靈王
狀態(tài):未簽到- [2天]
UID:39045
精華:0
發(fā)帖:1386
可可豆:12975 CB
威望:12975 點(diǎn)
在線時(shí)間:827(時(shí))
注冊(cè)時(shí)間:2010-11-21
26 樓:發(fā)表于:2011-09-17 11:40發(fā)自:Web Page
iPhone 實(shí)現(xiàn)動(dòng)畫效果
iPhone中實(shí)現(xiàn)動(dòng)畫,主要有兩種方式:UIView的動(dòng)畫塊和Core Animation的CATransition類慢哈。
1蔓钟、UIView的動(dòng)畫塊
之所以稱為動(dòng)畫塊,是因?yàn)閁View動(dòng)畫是成塊運(yùn)行的卵贱,也就是說作為完整的事務(wù)一次性運(yùn)行滥沫。
beginAnimation:context:標(biāo)志動(dòng)畫塊開始;
commitAnimations標(biāo)志動(dòng)畫塊結(jié)束键俱。(這個(gè)commit多少已經(jīng)暗示這個(gè)操作是事務(wù)性的)
這里面通常涉及4個(gè)操作:
beginAnimation:context:標(biāo)志動(dòng)畫塊開始
setAnimationCurve:定義動(dòng)畫加速或減速的方式兰绣,有四種,ease-in/ease-out,ease-in,linear,ease-out
setAnimationDuration:定義動(dòng)畫持續(xù)時(shí)間(以秒為單位)
commitAnimations:標(biāo)志動(dòng)畫塊結(jié)束
所有這些操作都是針對(duì)UIView的编振,或者說是UIView的類函數(shù)缀辩。
給段代碼示例:
1. CGContextRef?context?=?UIGraphicsGetCurrentContext();
[UIView?beginAnimations:nil?context:context];
[UIView?setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView?setAnimationDuration:2.0f];
[UIView?setAnimationBeginsFromCurrentState:YES];
[UIView?setAnimationDelegate:self];
[UIView?setAnimationDidStopSelector:@selector(animationFinished:)];
[self.imageView?setTransform:CGAffineTransformMakeScale(0.25f,?0.25f)];
[UIView?commitAnimations];
(這里面設(shè)置了動(dòng)畫的delegate,在動(dòng)畫結(jié)束后執(zhí)行animationFinished:函數(shù))
UIView除了實(shí)現(xiàn)上面這種簡(jiǎn)單的動(dòng)畫,還支持視圖的翻轉(zhuǎn)臀玄。例如在上面代碼的[UIView commitAnimations]前加上下面這句瓢阴,便可以實(shí)現(xiàn)視圖的翻轉(zhuǎn)(翻轉(zhuǎn)后的試圖中,imageView的大小變?yōu)樵瓉淼?.25倍):
[UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromLeftforView:self.viewcache:YES];
其中健无,參數(shù)UIViewAnimationTransitionFlipFromLeft定義了翻轉(zhuǎn)的方式荣恐。
iphone調(diào)用系統(tǒng)電話、瀏覽器累贤、地圖叠穆、郵件等
openURL的使用方法:
view plaincopy toclipboardprint?
[[UIApplication?sharedApplication]?openURL:[NSURL?URLWithString:appString]];
其中系統(tǒng)的appString有:
view plaincopy toclipboardprint?
1.Maphttp://maps.google.com/maps?q=Shanghai
2.Email??mailto://myname@google.com
3.Tel????tel://10086
4.Msg????sms://10086
openURL能幫助你運(yùn)行Maps,SMS畦浓,Browser,Phone甚至其他的應(yīng)用程序痹束。這是Iphone開發(fā)中我經(jīng)常需要用到的一段代碼,它僅僅只有一行而已讶请。
- (IBAction)openMaps {
//打開地圖
NSString*addressText = @"beijing";
//@"1Infinite Loop, Cupertino, CA 95014";
addressText =[addressTextstringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString*urlText = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@",addressText];
NSLog(@"urlText=============== %@", urlText);
[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:urlText]];
}
- (IBAction)openEmail {
//打開mail // Fire off an email to apple support
[[UIApplication sharedApplication]openURL:[NSURL???URLWithString:@"mailto://devprograms@apple.com"]];
}
- (IBAction)openPhone {
//撥打電話
// CallGoogle 411
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"tel://8004664411"]];
}
- (IBAction)openSms {
//打開短信
// Text toGoogle SMS
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"sms://466453"]];
}
-(IBAction)openBrowser {
//打開瀏覽器
// Lanuch any iPhone developers fav site
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"http://itunesconnect.apple.com"]];
}
UIPageControl實(shí)現(xiàn)自定義按鈕
有時(shí)候UIPageControl需要用到白色的背景,那么會(huì)導(dǎo)致上面的點(diǎn)按鈕看不見或不清楚,
我們可以通過繼承該類重寫函數(shù)來更換點(diǎn)按鈕的圖片現(xiàn)實(shí).
實(shí)現(xiàn)思路如下.
新建類繼承UIPageControl :
@interface MyPageControl : UIPageControl
{
UIImage*imagePageStateNormal;
UIImage*imagePageStateHighlighted;
}
- (id)initWithFrame:(CGRect)frame;
@property (nonatomic, retain) UIImage*imagePageStateNormal;
@property (nonatomic, retain) UIImage*imagePageStateHighlighted;
@end
聲明了初始化該類的函數(shù)
用了兩個(gè)UIImage保存兩張圖片,大家知道的, UIPageCotrol的按鈕分為兩態(tài),一個(gè)是正常,一個(gè)是高亮
接下來實(shí)現(xiàn)該類以及重寫父類方法:
@interfaceMyPageControl(private)??//聲明一個(gè)私有方法,該方法不允許對(duì)象直接使用
- (void)updateDots;
@end
@implementation MyPageControl??//實(shí)現(xiàn)部分
@synthesize imagePageStateNormal;
@synthesize imagePageStateHighlighted;
- (id)initWithFrame:(CGRect)frame { //初始化
self = [superinitWithFrame:frame];
return self;
}
- (void)setImagePageStateNormal:(UIImage*)image {??//設(shè)置正常狀態(tài)點(diǎn)按鈕的圖片
[imagePageStateNormalrelease];
imagePageStateNormal= [image retain];
[self updateDots];
}
-(void)setImagePageStateHighlighted:(UIImage *)image { //設(shè)置高亮狀態(tài)點(diǎn)按鈕圖片
[imagePageStateHighlightedrelease];
imagePageStateHighlighted= [image retain];
[self updateDots];
}
- (void)endTrackingWithTouch:(UITouch*)touch withEvent:(UIEvent *)event { //點(diǎn)擊事件
[superendTrackingWithTouch:touch withEvent:event];
[self updateDots];
}
- (void)updateDots { //更新顯示所有的點(diǎn)按鈕
if(imagePageStateNormal || imagePageStateHighlighted)
{
NSArray*subview = self.subviews;??//獲取所有子視圖
for(NSInteger i = 0; i < [subview count]; i++)
{
UIImageView*dot = [subview objectAtIndex:i];??//以下不解釋,看了基本明白
dot.image= self.currentPage == i ? imagePageStateNormal : imagePageStateHighlighted;
}
}
}
- (void)dealloc { //釋放內(nèi)存
[imagePageStateNormalrelease], imagePageStateNormal = nil;
[imagePageStateHighlightedrelease], imagePageStateHighlighted = nil;
[super dealloc];
}
@end
OK,在添加處加入以下來實(shí)例化該對(duì)象代碼:
MyPageControl *pageControl =[[MyPageControl alloc] initWithFrame:CGRectMake(0,0, 200, 30)];
pageControl.backgroundColor = [UIColorclearColor];
pageControl.numberOfPages = 5;
pageControl.currentPage = 0;
[pageControlsetImagePageStateNormal:[UIImageimageNamed:@"pageControlStateNormal.png"]];
[pageControl setImagePageStateHighlighted:[UIImageimageNamed:@"pageControlStateHighlighted.png"]];
[self.view addSubview:pageControl];
[pageControl release];
iPhone電子書toolbar的實(shí)現(xiàn)
iPhone電子書的toolbar一般都設(shè)計(jì)成半透明祷嘶,上面放置一個(gè)進(jìn)度條和一個(gè)Label(用于顯示頁碼),這里用代碼做一個(gè)最基本的實(shí)現(xiàn)夺溢。
生成一個(gè)UIToolbar
UIToolbar*toolbar =[[[UIToolbaralloc]init]autorelease];
toolbar.barStyle=UIBarStyleBlackTranslucent;
[toolbarsizeToFit];
CGFloattoolbarHeight =[toolbarframe].size.height;
CGRectrootViewBounds =self.parentViewController.view.bounds;
CGFloatrootViewHeight =CGRectGetHeight(rootViewBounds);
CGFloatrootViewWidth =CGRectGetWidth(rootViewBounds);
CGRectrectArea =CGRectMake(0, rootViewHeight-toolbarHeight,rootViewWidth, toolbarHeight);
[toolbarsetFrame:rectArea];
toolbar.backgroundColor= [UIColorclearColor];
生成一個(gè)Slider
UISlider*readSlider=[[[UISlideralloc]initWithFrame:CGRectMake(0,0,225,30)]autorelease];
readSlider.minimumValue=0.0f;
readSlider.maximumValue=1.0f;
readSlider.continuous=YES;
readSlider.enabled=YES;
生成一個(gè)Label
UILabel*readLabel=[[[UILabelalloc]initWithFrame:CGRectMake(230,0,50,30)]autorelease];
readLabel.backgroundColor= [UIColorclearColor];
readLabel.textColor=[UIColorwhiteColor];
Slider和Label加入到toolbar中
NSMutableArray*tbitems =[NSMutableArrayarray];
[tbitemsaddObject:[[[UIBarButtonItem alloc]initWithCustomView:readSlider] autorelease]];
[tbitemsaddObject:[[[UIBarButtonItemalloc] initWithCustomView:readLabel]autorelease]];
toolbar.items= tbitems;
toolbar加入到當(dāng)前view中
[self.navigationController.viewaddSubview:toolbar];
點(diǎn)擊屏幕即隱藏的功能论巍,將toolbar的hidden屬性置為YES即可
toolBar.hidden=YES;
iphone界面如何實(shí)現(xiàn)下拉列表
代碼如下:
#import
@interfaceDropDownList : UIView {
UITextField* textField;//文本輸入框
NSArray* list;//下拉列表數(shù)據(jù)
BOOLshowList;//是否彈出下拉列表
UITableView* listView;//下拉列表
CGRect oldFrame,newFrame;//整個(gè)控件(包括下拉前和下拉后)的矩形
UIColor *lineColor,*listBgColor;//下拉框的邊框色、背景色
CGFloat lineWidth;//下拉框邊框粗細(xì)
UITextBorderStyle borderStyle;//文本框邊框style
}
@property(nonatomic,retain)UITextField *textField;
@property(nonatomic,retain)NSArray* list;
@property(nonatomic,retain)UITableView* listView;
@property(nonatomic,retain)UIColor *lineColor,*listBgColor;
@property(nonatomic,assign)UITextBorderStyle borderStyle;
-(void)drawView;
-(void)setShowList:(BOOL)b;
@end
#import"DropDownList.h"
@implementationDropDownList
@synthesizetextField,list,listView,lineColor,listBgColor,borderStyle;
- (id)initWithFrame:(CGRect)frame {
if(self=[superinitWithFrame:frame]){
//默認(rèn)的下拉列表中的數(shù)據(jù)
list=[[NSArray alloc]initWithObjects:@"1",@"2",@"3",@"4",nil];
borderStyle=UITextBorderStyleRoundedRect;
showList=NO;//默認(rèn)不顯示下拉框
oldFrame=frame;//未下拉時(shí)控件初始大小
//當(dāng)下拉框顯示時(shí)风响,計(jì)算出控件的大小嘉汰。
newFrame=CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height*5);
lineColor=[UIColor lightGrayColor];//默認(rèn)列表邊框線為灰色
listBgColor=[UIColor whiteColor];//默認(rèn)列表框背景色為白色
lineWidth=1;//默認(rèn)列表邊框粗細(xì)為1
//把背景色設(shè)置為透明色,否則會(huì)有一個(gè)黑色的邊
self.backgroundColor=[UIColor clearColor];
[selfdrawView];//調(diào)用方法状勤,繪制控件
}
returnself;
}
-(void)drawView{
//文本框
textField=[[UITextField alloc]
initWithFrame:CGRectMake(0,0,
oldFrame.size.width,
oldFrame.size.height)];
textField.borderStyle=borderStyle;//設(shè)置文本框的邊框風(fēng)格
[selfaddSubview:textField];
[textField addTarget:selfaction:@selector(dropdown) forControlEvents:UIControlEventAllTouchEvents];
//下拉列表
listView=[[UITableView alloc]initWithFrame:
CGRectMake(lineWidth,oldFrame.size.height+lineWidth,
oldFrame.size.width-lineWidth*2,
oldFrame.size.height*4-lineWidth*2)];
listView.dataSource=self;
listView.delegate=self;
listView.backgroundColor=listBgColor;
listView.separatorColor=lineColor;
listView.hidden=!showList;//一開始listView是隱藏的鞋怀,此后根據(jù)showList的值顯示或隱藏
[selfaddSubview:listView];
[listView release];
}
-(void)dropdown{
[textField resignFirstResponder];
if(showList) {//如果下拉框已顯示,什么都不做
return;
}else{//如果下拉框尚未顯示持搜,則進(jìn)行顯示
//把dropdownList放到前面密似,防止下拉框被別的控件遮住
[self.superview bringSubviewToFront:self];
[selfsetShowList:YES];//顯示下拉框
}
}
#pragma mark listViewdataSource method and delegate method
-(NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section{
returnlist.count;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
staticNSString *cellid=@"listviewid";
UITableViewCell* cell=[tableView dequeueReusableCellWithIdentifier:cellid];
if(cell==nil){
cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellid]autorelease];
}
//文本標(biāo)簽
cell.textLabel.text=(NSString*)[list objectAtIndex:indexPath.row];
cell.textLabel.font=textField.font;
cell.selectionStyle=UITableViewCellSelectionStyleGray;
returncell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
returnoldFrame.size.height;
}
//當(dāng)選擇下拉列表中的一行時(shí),設(shè)置文本框中的值葫盼,隱藏下拉列表
-(void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//NSLog(@"select");
textField.text=(NSString*)[list objectAtIndex:indexPath.row];
//NSLog(@"textField.text=%@",textField.text);
[selfsetShowList:NO];
}
-(BOOL)showList{//setShowList:No為隱藏残腌,setShowList:Yes為顯示
returnshowList;
}
-(void)setShowList:(BOOL)b{
showList=b;
NSLog(@"showlist is set ");
if(showList){
self.frame=newFrame;
}else{
self.frame=oldFrame;
}
listView.hidden=!b;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code.
}
*/
- (void)dealloc {
[superdealloc];
}
@end
iphone之UISegmentedControl
代碼:
//選擇按鈕
NSArray*buttonNames = [NSArray arrayWithObjects:@"今天", @"本周", @"本月",nil];
UISegmentedControl* segmentedControl = [[UISegmentedControl alloc]initWithItems:buttonNames];
[segmentedControl setFrame:CGRectMake(60, 10, 200, 40)];
segmentedControl.selectedSegmentIndex=1;
//添加事件
[segmentedControl addTarget:self action:@selector(segmentAction:)forControlEvents:UIControlEventValueChanged];
[self.viewaddSubview:segmentedControl];
[segmentedControl release];
//事件
-(void)segmentAction:(UISegmentedControl *)Seg{
NSIntegerIndex = Seg.selectedSegmentIndex;
NSLog(@"Seg.selectedSegmentIndex:%d",Index);
}