您的位置:首页 > 其它

iphone开发笔记和技巧总结

2011-12-15 09:44 465 查看
转自: http://www.cocoachina.com/bbs/read.php?tid=73570&uid=39045&page=1

iphone程序中实现截屏的一种方法

在iphone程序中实现截屏的一种方法:

//导入头文件

#import QuartzCore/QuartzCore.h

//将整个self.view大小的图层形式创建一张图片image UIGraphicsBeginImageContext(self.view.bounds.size);

[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage*image=UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

//然后将该图片保存到图片图

UIImageWriteToSavedPhotosAlbum(image,self,nil,nil);

Objective-C
画图

1.颜色和字体

UIKit提供了UIColor和UIFont类来进行设置颜色和字体,

UIColor *redColor=【UIColor redColor】;

【redColor
set】;//设置为红色

UIFont *front=【UIFont systemFontOfSize:14.0】;//获得系统字体

【myLable
setFont:font】;//设置文本对象的字体

2.drawRect方法

对于画图,你首先需要重载drawRect方法,然后调用setNeedsDisplay方法让系统画图:

-(void)drawRect:(CGRect)rect;//在rect指定的区域画图

-(void)setNeedsDisplay;//让系统调用drawRect画图

延时函数和Timer的使用

延时函数:

[NSThread sleepForTimeInterval:5.0]; //暂停5s.

Timer的使用:

NSTimer
*connectionTimer; //timer对象

//实例化timer

self.connectionTimer=[NSTimerscheduledTimerWithTimeInterval:1.5
target:selfselector:@selector(timerFired:) userInfo:nil repeats:NO];

[[NSRunLoop
currentRunLoop]addTimer:self.connectionTimer forMode:NSDefaultRunLoopMode];

//用timer作为延时的一种方法

do{

[[NSRunLoopcurrentRunLoop]runUntilDate:[NSDatedateWithTimeIntervalSinceNow:1.0]];

}while(!done);

//timer调用函数

-(void)timerFired:(NSTimer *)timer{

done
=YES;

}

启动界面的制作

iPhone开发实现splash画面非常简单,做一个全屏的欢迎页的图片,把它命名为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];

return YES;

}

这样splash页面就停留5秒后,消失了。

翻页效果

经常看到iPhone的软件向上向下翻页面的效果,其实这个很简单,已经有封装好的相关方法处理。

//首先设置动画的相关参数

[UIView
beginAnimations:@"Curl"context:nil];

[UIView setAnimationDuration:1.25]; //时间

[UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut];//速度

//然后设置动画的动作和目标视图

[UIViewsetAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];

参数UIViewAnimationTransitionCurlUp代表向上翻页,如果向下的话UIViewAnimationTransitionCurlDown.

forView那把当前的视图传进去。

//最后提交动画

[UIView commitAnimations];

自定义按钮

UIButton *Btn;

CGRect frame;

Btn = [[UIButton buttonWithType:UIButtonTypeCustom] retain]; //按钮的类型

[Btn setImage:[UIImage imageNamed:@“aaa.png”] forState:UIControlStateNormal];//设置按钮图片

Btn.tag = 10;

frame.size.width = 59; //设置按钮的宽度

frame.size.height = 59; //设置按钮的高度

frame.origin.x =150; //设置按钮的位置

frame.origin.y =260;

[Btn setFrame:frame];

[Btn setBackgroundColor:[UIColor clearColor]];

[Btn addTarget:self action:@selector(btnPressed:)forControlEvents:UIControlEventTouchUpInside]; //按钮的单击事件

[self.view addSubview:Btn];

[Btn release];

-(void)btnPressed:(id)sender {

//在这里实现按钮的单击事件

}

截取屏幕图片

//创建一个基于位图的图形上下文并指定大小为CGSizeMake(200,400)

UIGraphicsBeginImageContext(CGSizeMake(200,400));

//renderInContext 呈现接受者及其子范围到指定的上下文

[self.view.layerrenderInContext:UIGraphicsGetCurrentContext()];

//返回一个基于当前图形上下文的图片

UIImage *aImage =UIGraphicsGetImageFromCurrentImageContext();

//移除栈顶的基于当前位图的图形上下文

UIGraphicsEndImageContext();

//以png格式返回指定图片的数据

imageData = UIImagePNGRepresentation(aImage);

使用NSTimer与iphone的简单动画,实现飘雪效果

使用NSTimer与iphone的简单动画,实现飘雪效果,这理原理比较简单,就是定时生成一定的雪花图片,然后使用动画的方式向下漂落(我在其它论坛,看到使用path的方式实现的一个云漂来漂去的效果,实际也可以用那种方式实现,这实际就是前面说的动画效果的两种应用)。所以,我们可以在
viewDidLoad事件中,增加一个图片及定时器并启动,这里的pic请在头文件中定义。

-(void)viewDidLoad{

[super viewDidLoad];

self.pic = [UIImage imageNamed:@"snow.png"];//初始化图片

//启动定时器,实现飘雪效果

[NSTimer scheduledTimerWithTimeInterval:(0.2) target:self selector:@selector(ontime) userInfo:nil repeats:YES];

}

然后再实现定时器定时调用的ontime方法:

-(void)ontime{

UIImageView *view = [[UIImageView alloc] initWithImage:pic];//声明一个UIImageView对象,用来添加图片

view.alpha = 0.5;//设置该view的alpha为0.5,半透明的

int x = round(random()%320);//随机得到该图片的x坐标

int y = round(random()%320);//这个是该图片移动的最后坐标x轴的

int s = round(random()%15)+10;//这个是定义雪花图片的大小

int sp = 1/round(random()%100)+1;//这个是速度

view.frame = CGRectMake(x, -50, s, s);//雪花开始的大小和位置

[self.view addSubview:view];//添加该view

[UIView beginAnimations:nil context:view];//开始动画

[UIView setAnimationDuration:10*sp];//设定速度

view.frame = CGRectMake(y, 500, s, s);//设定该雪花最后的消失坐标

[UIView setAnimationDelegate:self];

[UIView commitAnimations];

}

使用NSTimer实现倒计时

今天在CocoaChina上面看到有人在问倒计时怎么做,记得以前在看Iphone31天的时候做过一个,今天翻出来运行不了了,原因是我的IphoneSDK升级到3.1了,以前使用的是2.2.1,在2.2.1里面是可以使用NSCalendarDate的,但是在3.1里面不能够使用,怎么办,只好用NSTimer了,最后还是给实现了。代码也比较简单,开始运行viewDidLoad的时候加载 [NSTimerscheduledTimerWithTimeInterval:1.0
target:selfselector:@selector(timerFireMethod:) userInfo:nilrepeats:YES];//使用timer定时,每秒触发一次

,然后就是写selector了。

-(void)timerFireMethod:(NSTimer*)theTimer

{

//NSDateFormatter *dateformatter =[[[NSDateFormatter alloc]init]autorelease];//定义NSDateFormatter用来显示格式

//[dateformatter setDateFormat:@"yyyy MM dd hh mmss"];//设定格式

NSCalendar *cal = [NSCalendarcurrentCalendar];//定义一个NSCalendar对象

NSDateComponents *shibo = [[NSDateComponentsalloc] init];//初始化目标时间(好像是世博会的日期)

[shibo setYear:2010];

[shibo setMonth:5];

[shibo setDay:1];

[shibo setHour:8];

[shibo setMinute:0];

[shibo setSecond:0];

NSDate *todate = [caldateFromComponents:shibo];//把目标时间装载入date

[shibo release];

// NSString *ssss = [dateformatterstringFromDate:dd];

// NSLog([NSString stringWithFormat:@"shiboshi:%@",ssss]);

NSDate *today = [NSDate date];//得到当前时间

// NSString *sss = [dateformatterstringFromDate:today];

// NSLog([NSString stringWithFormat:@"xianzaishi:%@",sss]);

//用来得到具体的时差

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时%d分%d秒",[d year],[d month], [d day],[d hour], [d minute], [d
second]];

}

这样就实现了倒计时的功能。

Iphone幻灯片效果+背景音乐

今天弄了几张好看的图片,我就摸索着实现了图片的幻灯片效果,这个以前也实现过了,也算是温故知新吧,另外就是使用SoundEngine类实现背景音乐的播放。SoundEngine类可以从http://www.cocoachina.com/bbs/read.php?tid-1215.html下载到。

代码很简单贴出来,以备不时只需:

-(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;//时间间隔

pictures.animationRepeatCount = 0;//循环播放

[pictures startAnimating];//开始播放

//播放背景音乐,利用SoundEngine类进行播放

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为我们提供了一个很强大得时间定时器 NSTimer,它可以完成任何定时功能:

我们使用起来也很简单,只要记住三要素就可以,具体得三要素是:时间间隔NSTimeInterval浮点型,事件代理delegate和事件处理方法@selector();

就可以用

1 +(NSTimer *)scheduledTimerWithTimeIn

2 terval:(NSTimeInterval)ti target:(id)aTarget
selector:(SEL)aSelector userInfo:(id)userInfo
repeats:(BOOL)yesOrNo;

[/pre]来初始化一个
时间定时器

下面我写了一个很简单得例子:

-(void)initTimer

{

//时间间隔4 NSTimeInterval
timeInterval =1.0;

//定时器6 NSTimer
showTimer =[NSTimer scheduledTimerWithTimeInterval:maxShowTime

target:self

selector:@selector(handleMaxShowTimer:)

userInfo:nil

repeats:NO];

}

//触发事件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:@"现在马上就有新的一天了!"22 delegate:self

cancelButtonTitle:nil

otherButtonTitles:CONFIRM_TITLE, nil];

[alert show];

[alert release];

}

[data release];

[dateFormator release];

}

iphone开发之
- 启动页面设置

不管是开发个人项目还是公司项目,大家通常都有一个需求,就是,在app启动的时候,指定一定的时间来显示自己的或者公司的logo,那么,我就将刚刚写好的启动加载页面设置代码贡献出来。(不对指出请留言,好的话也给我留个言吧,鼓励下我!呵呵)

这里我需要用到NSTimer这个东西,相关的内容可以查看API,有比较详细的解释。

新建一个项目,随便是什么项目,我建立的是“view based application”,然后,命名为“Logo”,然后确定。

直接编辑“Resources"目录下的"LogoViewController.xib”。将背景颜色改称绿色,主要是为了当从logo页跳转过来的时候能有感觉到变化。

然后新建一个NSTimer.

logoviewcon*lo
= [[logoviewconalloc] initWithNibName:@"logoviewcon"bundle:nil];

self.logo =
lo;

[lo release];

[windowaddSubview:self.logo.view];

//初始化timmer

NSTimer*timer =
[NSTimerscheduledTimerWithTimeInterval: 1.5target: selfselector: @selector(logo:) userInfo: nilrepeats: YES];

注意,初始化的代码中有这么一段:@selector(logo:),其中的方法就是当这个1.5秒时间过去之后自动调用的方法。

-(void)
logo:(NSTimer*)timer{

[logo.view removeFromSuperview];

[timer invalidate];//这句代码用来终止timmer,否则,每过1.5秒,就会执行该方法一次,我们是要在开始的时候执行一次就够了。

}

iphone
学习笔记

1。隐藏状态栏[[UIApplication sharedApplication] setStatusBarHidden:YES];

/******************************************************************************

1、取随机数:

NSData *datanow = [NSData data];

int i = (int)datanow;

srand(i);

rand();

//int effectPicNum = rand()%7;

******************************************************************************/

/******************************************************************************

2、播放音乐:

-(void) playMusic

{

@try{

//取文件路径

NSString *musicFilePath = [[NSBundle mainBundle] pathForResource:@"startLogo" ofType:@"mp3"];

NSURL *musicURL = [[NSURL alloc] initFileURLWithPath:musicFilePath];

musicPlayer=
[[AVAudioPlayeralloc] initWithContentsOfURL:musicURL error:nil];

[musicURL release];

//[musicPlayer prepareToPlay];

//[musicPlayer setVolume:1]; //设置音量大小

musicPlayer.numberOfLoops= 0; //设置播放次数,-1为一直循环,0为一次

[musicPlayerplay];

}

@catch(NSException*
e) {

}

}

******************************************************************************/

/******************************************************************************

3、每隔0.8秒执行timeCount方法:

NSTimer*countTimer;

countTimer=
[NSTimerscheduledTimerWithTimeInterval: 0.8target: selfselector: @selector(timeCount:) userInfo: nilrepeats: YES];

[countTimerfire];
//执行timer

******************************************************************************/

/******************************************************************************

4、延迟1秒执行test方法:

[selfperformSelector:@selector(test) withObject:nilafterDelay:0.1];

******************************************************************************/

/******************************************************************************

5、启动线程:

[NSThreaddetachNewThreadSelector:@selector(transImage) toTarget:selfwithObject:nil];

timer=[NSTimerscheduledTimerWithTimeInterval:0.03target:selfselector:@selector(TimerClock:) userInfo:nilrepeats:YES]; //启动一个NSTimer执行广播

[timerfire]; //执行timer

-(void)TimerClock:(id)sender

{

//控制延迟触发

if(Timecontrol>1)
{

[timerConditionbroadcast];
//广播,触发处于等待状态的timerCondition

}

}

-(void)transImage

{

isRunning=YES;

while (countTime < COUNTTIME)
{

[timerConditionwait];

lim += 255 / (2 * KFrame);

[selfprocessImage];

countTime += 1000 / KFrame;

}

[timerinvalidate];

isRunning=NO;

}

******************************************************************************/

/******************************************************************************

6、获取文件路径:

//通过NSHomeDirectory获得文件路径

NSString *homeDirectory = NSHomeDirectory();

NSString *fileDirectory = [homeDirectory stringByAppendingPathComponent:@"temp/app_data.plist"];

//使用NSSearchPathForDirectoriesInDomains检索指定路径

NSArray*path
= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

//常量NSDocumentDirectory表示正在查找Documents目录的路径(使用NSCachesDirectory表明要查找的时Caches文件夹),常量NSUserDomainMask表明我们希望将搜索限制于我们应用程序的沙盒,最后一个参数决定了是否“展开”波浪线符号。

//在Mac系统中,‘~’表示主路经(Home),如果不展开,路径看起来就是:‘~/Documents’,展开后即得到完整路径。这个参数一直设置位真即可。

NSString *documentsDirectory = [paths objectAtIndex:0];z

NSString *fileDirectory = [documentsDirectory stringByAppendingPathComponent:@"file.txt"];

//使用Foundation中的NSTemporaryDirectory函数直接返回代表temp文件夹的全路径的字符串对象

NSString *tempDirectory = NSTemporaryDirectory();

NSString*file
= [tempDirectory stringByAppendingPathComponent:@"file.txt"];

Example:

NSArray*path
= NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

NSString *docDir = [path objectAtIndex:0];

NSLog(@"filepath:%@",docDir);

NSString*str
= @"hello.jpg";

NSString*filepath
= [docDir stringByAppendingPathComponent:str];

//NSString *filepath = [docDir stringByAppendingPathComponent:[NSString stringWithUTF8String:"///mest.txt"]];

NSLog(@"filepath:%@",filepath);

BOOLsuccess
= [[NSFileManagerdefaultManager]createFileAtPath:
filepath contents:nilattributes:nil];

NSLog(@"result",success);

printf("Create
File:%s %s.",[filepath UTF8String],
success ? "Success": "Error");

NSString* reValue= [NSString stringWithString:@"\"success\""];

NSLog(reValue);

******************************************************************************/

/************************************************************************************************************************************************************

7文件、文件夹操作

//如果"/Documents/Theme"路径不存在,则创建。

if(![[NSFileManagerdefaultManager]fileExistsAtPath:themePath])

{

[[NSFileManagerdefaultManager] createDirectoryAtPath:themePath attributes:nil];

}

//删除已存在的同名文件夹

if([[NSFileManagerdefaultManager] fileExistsAtPath:savePath])
{

[[NSFileManagerdefaultManager] removeItemAtPath:savePath error:NULL];

}

************************************************************************************************************************************************************/

/************************************************************************************************************************************************************

7 子线程抛给主线程:

[selfperformSelectorOnMainThread:@selector(shiftView) withObject:nilwaitUntilDone:YES];

************************************************************************************************************************************************************/

/************************************************************************************************************************************************************

8获取当前时间

NSDateFormatter*formatter = [[NSDateFormatteralloc] init];

[formatter setDateFormat:@"yyyy-MM-dd
hh:mm:ss"];

NSString *locationString=[formatter stringFromDate:
[NSDate date]];

//获取当前时间作为productId

NSDateFormatter*formatter = [[NSDateFormatteralloc] init];

[formatter setDateFormat:@"hhmmss"];

NSString *locationString=[formatter stringFromDate:
[NSDate date]];

downloadInfo.productId = locationString;

[formatter release];

/******************************************************************************

函数名称 : getDate

函数描述 : 获取当前日期时间

输入参数 : N/A

输出参数 : N/A

返回值 : NSString 当前时间

备注 :

******************************************************************************/

-(NSString *)getDate

{

NSDateFormatter*formatter = [[NSDateFormatteralloc] init];

[formatter setDateFormat:@"yyyy-MM-dd
EEEE HH:mm:ss a"];

NSString *locationString=[formatter stringFromDate:
[NSDate date]];

[formatter release];

return locationString;

}

大写的H日期格式将默认为24小时制,小写的h日期格式将默认为12小时

不需要特别设置,只需要在dataFormat里设置类似"yyyy-MMM-dd"这样的格式就可以了

日期格式如下:

y 年 Year 1996; 96

M 年中的月份 Month July; Jul; 07

w 年中的周数 Number 27

W 月份中的周数 Number 2

D 年中的天数 Number 189

d 月份中的天数 Number 10

F 月份中的星期 Number 2

E 星期中的天数 Text Tuesday; Tue

a Am/pm 标记 Text PM

H 一天中的小时数(0-23) Number 0

k 一天中的小时数(1-24) Number 24

K am/pm 中的小时数(0-11) Number 0

h am/pm 中的小时数(1-12) Number 12

m 小时中的分钟数 Number 30

s 分钟中的秒数 Number 55

S 毫秒数 Number 978

z 时区 General time zone Pacific Standard Time; PST; GMT-08:00

Z 时区 RFC 822 time zone -0800

************************************************************************************************************************************************************/

/************************************************************************************************************************************************************

读取和写入plist文件

plist文件是标准的xml文件,在cocoa中可以很简单地使用。这里介绍一下使用方法: 以下代码在Mac和iPhone中均适用。

写入plist文件: NSMutableDictionary * dict = [ [ NSMutableDictionary alloc ] initWith

plist文件是标准的xml文件,在cocoa中可以很简单地使用。这里介绍一下使用方法:

以下代码在Mac和iPhone中均适用。

写入plist文件:

NSMutableDictionary* dict = [ [ NSMutableDictionaryalloc
] initWithContentsOfFile:@"/Sample.plist"];

[ dict setObject:@"Yes"forKey:@"RestartSpringBoard"];

[ dict writeToFile:@"/Sample.plist"atomically:YES];

读取plist文件:

NSMutableDictionary* dict = [ [ NSMutableDictionaryalloc
] initWithContentsOfFile:@"/Sample.plist"];

NSString* object = [ dict objectForKey:@"RestartSpringBoard" ];

************************************************************************************************************************************************************/

让一个UIImageView响应点击事件

UIImageView *imgView
=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0,320, 44)];

imgView.userInteractionEnabled=YES;

UITapGestureRecognizer *singleTap
=[[UITapGestureRecognizer alloc]initWithTarget:selfaction:@selector(onClickImage)];

[imgView addGestureRecognizer:singleTap];

[singleTap release];

-(void)onClickImage{

// here, do whatever you wantto do

NSLog(@"imageview
is clicked!");

}

iphone调用系统电话、浏览器、地图、邮件等

openURL的使用方法:

view
plaincopy
toclipboardprint?

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:appString]];

其中系统的appString有:

view
plaincopy
toclipboardprint?

1.Map http://maps.google.com/maps?q=Shanghai

2.Email mailto://myname@google.com

3.Tel tel://10086

4.Msg sms://10086

openURL能帮助你运行Maps,SMS,Browser,Phone甚至其他的应用程序。这是Iphone开发中我经常需要用到的一段代码,它仅仅只有一行而已。

- (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"]];

}

iphone程序内调用谷歌地图

使用CLLocationManager类,MKMapView。并且实现<MKMapViewDelegate,CLLocationManagerDelegate>

//初始化CLLocationManager,CLLocationManager获得当前地理坐标

locmanager=[[CLLocationManager alloc]init];

[locmanager setDelegate:self];

//设置精确度

[locmanager setDesiredAccuracy:kCLLocationAccuracyBest];

[locmanagerstartUpdatingLocation];

执行完以后,会自动调用代理方法:

在代理方法:

-
(void)locationManager:(CLLocationManager *)managerdidUpdateToLocation:(CLLocation*)newLocation
fromLocation:(CLLocation *)oldLocation{

//初始化矩形大小

CGRect rect=CGRectMake(0,0,320,460);

//设置地图大小为矩形大小

map=[[MKMapView alloc] initWithFrame:rect];

CLLocationCoordinate2Dloc=[newLocation coordinate];

lat=loc.latitude;

lon=loc.longitude;

//coordinate坐标

CLLocationCoordinate2DtheCoordinate;

CLLocationCoordinate2DtheCenter;

//theCoordinate.latitude=lat;

//theCoordinate.longitude=lon;

theCoordinate=loc;

[map setDelegate:self];

//设置地图显示的类型,有卫星地图,道路,等

[map setMapType:MKMapTypeStandard];

//[mapsetMapType:MKMapTypeSatellite];

//区域坐标Region(区域,地域)

MKCoordinateRegiontheRegin;

//theCenter.latitude=lat;

//theCenter.longitude=lon;

theCenter=loc;

theRegin.center=theCenter;

//坐标间距(span:间隔,间距)

MKCoordinateSpantheSpan;

theSpan.latitudeDelta=0.1;

theSpan.longitudeDelta=0.1;

//设置地图显示的区域,

theRegin.span=theSpan;

//[mapsetRegion:theRegin];

[map regionThatFits:theRegin];

map.showsUserLocation=YES;

[self.viewaddSubview:map];

}

-
(MKAnnotationView *)mapView:(MKMapView *)mapViewviewForAnnotation:(id<MKAnnotation>)annotation{

NSLog(@"-------viewForAnnotation-------");

//此类可以显示针一样的图标

MKPinAnnotationView*newAnnotation=[[MKPinAnnotationViewalloc] initWithAnnotation:annotationreuseIdentifier:@"annotation1"];

//newAnnotation.animatesDrop=YES;

//newAnnotation.animatesDrop=NO;

newAnnotation.pinColor=MKPinAnnotationColorPurple;

//显示标志提示

newAnnotation.canShowCallout=YES;

return newAnnotation;

}

UIPageControl实现自定义按钮

有时候UIPageControl需要用到白色的背景, 那么会导致上面的点按钮看不见或不清楚,

我们可以通过继承该类重写函数来更换点按钮的图片现实.

实现思路如下.

新建类继承UIPageControl :

@interface MyPageControl : UIPageControl

{

UIImage*imagePageStateNormal;

UIImage*imagePageStateHighlighted;

}

- (id)initWithFrame:(CGRect)frame;

@property (nonatomic, retain) UIImage*imagePageStateNormal;

@property (nonatomic, retain) UIImage*imagePageStateHighlighted;

@end

声明了初始化该类的函数

用了两个UIImage保存两张图片, 大家知道的,
UIPageCotrol的按钮分为两态, 一个是正常, 一个是高亮

接下来实现该类以及重写父类方法:

@interfaceMyPageControl(private) // 声明一个私有方法, 该方法不允许对象直接使用

- (void)updateDots;

@end

@implementation MyPageControl //实现部分

@synthesize imagePageStateNormal;

@synthesize imagePageStateHighlighted;

- (id)initWithFrame:(CGRect)frame { // 初始化

self = [superinitWithFrame:frame];

return self;

}

- (void)setImagePageStateNormal:(UIImage*)image { // 设置正常状态点按钮的图片

[imagePageStateNormalrelease];

imagePageStateNormal= [image retain];

[self updateDots];

}

-(void)setImagePageStateHighlighted:(UIImage *)image { // 设置高亮状态点按钮图片

[imagePageStateHighlightedrelease];

imagePageStateHighlighted= [image retain];

[self updateDots];

}

- (void)endTrackingWithTouch:(UITouch*)touch withEvent:(UIEvent *)event { // 点击事件

[superendTrackingWithTouch:touch withEvent:event];

[self updateDots];

}

- (void)updateDots { // 更新显示所有的点按钮

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 { // 释放内存

[imagePageStateNormalrelease], imagePageStateNormal = nil;

[imagePageStateHighlightedrelease], imagePageStateHighlighted = nil;

[super dealloc];

}

@end

OK, 在添加处加入以下来实例化该对象代码:

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的实现

iPhone电子书的toolbar一般都设计成半透明,上面放置一个进度条和一个Label(用于显示页码),这里用代码做一个最基本的实现。

生成一个UIToolbar

UIToolbar *toolbar
=[[[UIToolbar alloc] init] autorelease];

toolbar.barStyle=UIBarStyleBlackTranslucent;

[toolbar sizeToFit];

CGFloat toolbarHeight
=[toolbar frame].size.height;

CGRect rootViewBounds
=self.parentViewController.view.bounds;

CGFloat rootViewHeight
=CGRectGetHeight(rootViewBounds);

CGFloat rootViewWidth
=CGRectGetWidth(rootViewBounds);

CGRect rectArea
= CGRectMake(0, rootViewHeight-toolbarHeight,rootViewWidth,
toolbarHeight);

[toolbar setFrame:rectArea];

toolbar.backgroundColor=
[UIColor clearColor];

生成一个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;

生成一个Label

UILabel*readLabel =[[[UILabelalloc]initWithFrame:CGRectMake(230,0, 50,30)] autorelease];

readLabel.backgroundColor =
[UIColor clearColor];

readLabel.textColor =[UIColor whiteColor];

Slider和Label加入到toolbar中

NSMutableArray *tbitems
=[NSMutableArray array];

[tbitems addObject:[[[UIBarButtonItem
alloc]initWithCustomView:readSlider] autorelease]];

[tbitems addObject:[[[UIBarButtonItemalloc]
initWithCustomView:readLabel]autorelease]];

toolbar.items =
tbitems;

toolbar加入到当前view中

[self.navigationController.view addSubview:toolbar];

点击屏幕即隐藏的功能,将toolbar的hidden属性置为YES即可

toolBar.hidden = YES;

iOS开发_iphone开发_iphone界面如何实现下拉列表

代码如下:

#import <UIKit/UIKit.h>

@interface DropDownList
: UIView<UITableViewDelegate,UITableViewDataSource> {

UITextField* textField; //文本输入框

NSArray* list; //下拉列表数据

BOOL showList;
//是否弹出下拉列表

UITableView* listView; //下拉列表

CGRect oldFrame,newFrame; //整个控件(包括下拉前和下拉后)的矩形

UIColor *lineColor,*listBgColor;//下拉框的边框色、背景色

CGFloat lineWidth; //下拉框边框粗细

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"

@implementation DropDownList

@synthesize textField,list,listView,lineColor,listBgColor,borderStyle;

- (id)initWithFrame:(CGRect)frame
{

if(self=[super initWithFrame:frame]){

//默认的下拉列表中的数据

list=[[NSArray alloc]initWithObjects:@"1",@"2",@"3",@"4",nil];

borderStyle=UITextBorderStyleRoundedRect;

showList=NO; //默认不显示下拉框

oldFrame=frame; //未下拉时控件初始大小

//当下拉框显示时,计算出控件的大小。

newFrame=CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height*5);

lineColor=[UIColor lightGrayColor];//默认列表边框线为灰色

listBgColor=[UIColor whiteColor];//默认列表框背景色为白色

lineWidth=1;
//默认列表边框粗细为1

//把背景色设置为透明色,否则会有一个黑色的边

self.backgroundColor=[UIColor
clearColor];

[self drawView];//调用方法,绘制控件

}

return self;

}

-(void)drawView{

//文本框

textField=[[UITextField alloc]

initWithFrame:CGRectMake(0, 0,

oldFrame.size.width,

oldFrame.size.height)];

textField.borderStyle=borderStyle;//设置文本框的边框风格

[self addSubview:textField];

[textField addTarget:self action:@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是隐藏的,此后根据showList的值显示或隐藏

[self addSubview:listView];

[listView release];

}

-(void)dropdown{

[textField resignFirstResponder];

if (showList)
{//如果下拉框已显示,什么都不做

return;

}else {//如果下拉框尚未显示,则进行显示

//把dropdownList放到前面,防止下拉框被别的控件遮住

[self.superview
bringSubviewToFront:self];

[self setShowList:YES];//显示下拉框

}

}

#pragma mark listViewdataSource method and delegate method

-(NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section{

return list.count;

}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString
*cellid=@"listviewid";

UITableViewCell* cell=[tableView dequeueReusableCellWithIdentifier:cellid];

if(cell==nil){

cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault

reuseIdentifier:cellid]autorelease];

}

//文本标签

cell.textLabel.text=(NSString*)[list objectAtIndex:indexPath.row];

cell.textLabel.font=textField.font;

cell.selectionStyle=UITableViewCellSelectionStyleGray;

return cell;

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

return oldFrame.size.height;

}

//当选择下拉列表中的一行时,设置文本框中的值,隐藏下拉列表

-(void)tableView:(UITableView
*)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath{

//NSLog(@"select");

textField.text=(NSString*)[list objectAtIndex:indexPath.row];

//NSLog(@"textField.text=%@",textField.text);

[self setShowList:NO];

}

-(BOOL)showList{//setShowList:No为隐藏,setShowList:Yes为显示

return showList;

}

-(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
{

[super dealloc];

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: