ios常用知識(shí)點(diǎn)(轉(zhuǎn)載)

? 轉(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 setDay:1];

[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重新編輯 ]

回復(fù)引用分享

舉報(bào)頂端

haoxue

痛定思痛也拜,人要知恥而后勇以舒!

級(jí)別: 精靈王

狀態(tài):未簽到- [2天]

UID:39045

精華:0

發(fā)帖:1386

可可豆:12975 CB

威望:12975 點(diǎn)

在線時(shí)間:827(時(shí))

注冊(cè)時(shí)間:2010-11-21

最后登錄:2016-08-30

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);

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贫导,隨后出現(xiàn)的幾起案子抛猫,更是在濱河造成了極大的恐慌,老刑警劉巖孩灯,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闺金,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡峰档,警方通過查閱死者的電腦和手機(jī)败匹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門匣距,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哎壳,你說我怎么就攤上這事毅待。” “怎么了归榕?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵尸红,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我刹泄,道長(zhǎng)外里,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任特石,我火速辦了婚禮盅蝗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姆蘸。我一直安慰自己墩莫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布逞敷。 她就那樣靜靜地躺著狂秦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪推捐。 梳的紋絲不亂的頭發(fā)上裂问,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音牛柒,去河邊找鬼堪簿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛皮壁,可吹牛的內(nèi)容都是我干的椭更。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼闪彼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼甜孤!你這毒婦竟也來了协饲?” 一聲冷哼從身側(cè)響起畏腕,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茉稠,沒想到半個(gè)月后描馅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡而线,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年铭污,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恋日。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘹狞,死狀恐怖岂膳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情磅网,我是刑警寧澤谈截,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站涧偷,受9級(jí)特大地震影響簸喂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜燎潮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一喻鳄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧确封,春花似錦除呵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腥放,卻和暖如春泛啸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秃症。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工候址, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人种柑。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓岗仑,卻偏偏與公主長(zhǎng)得像聚请,于是被迫代替她去往敵國(guó)和親荠雕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容