iphone开发中的一些小技

在iPhone开发过程中,一些小技巧对开发工作有很大的帮助作用,所以以下内容收集了一些开发过程中的小技巧。
 
1、如果在程序中想对某张图片进行处理的话(得到某张图片的一部分)可一用以下代码:
 
UIImage *image = [UIImage imageNamed :filename];

CGImageRef imageRef = image.CGImage ;

CGRect rect = CGRectMake (origin.x , origin.y ,size.width , size.height );

CGImageRef imageRefRect = CGImageCreateWithImageInRect (imageRef, rect);

UIImage *imageRect = [[UIImage alloc ] initWithCGImage :imageRefRect];

 

2、判断设备是iphone还是iphone4的代码:

 

#define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640 , 960 ), [[UIScreen mainScreen] currentMode].size) : NO)

 

3、判断邮箱输入的是否正确:

 

- (BOOL ) validateEmail: (NSString *) candidate {

NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"

NSPredicate *emailTest = [NSPredicate predicateWithFormat :@"SELF MATCHES %@" , emailRegex]; 

 

return [emailTest evaluateWithObject :candidate];

}

 

4、如何把当前的视图作为照片保存到相册中去:

 

#import <QuartzCore/QuartzCore.h>

UIGraphicsBeginImageContext(currentView.bounds .size );     //currentView 当前的 view

[currentView. layer renderInContext: UIGraphicsGetCurrentContext()];

UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

UIImageWriteToSavedPhotosAlbum(viewImage, nil , nil , nil );

 

5、本地通知(类似于push通知)按home键到后台 十秒后触发:

UILocalNotification *notification=[[UILocalNotification alloc ] init ]; 

if (notification!=nil ) { 

NSLog ( @">> support local notification"); 

NSDate *now=[NSDate new ]; 

notification.fireDate =[now addTimeInterval :10 ]; 

notification.timeZone =[NSTimeZone defaultTimeZone ]; 

notification.alertBody =@" 该去吃晚饭了! "

[[ UIApplication sharedApplication]. scheduleLocalNotification:notification];

}

 

6、捕获iphone通话事件:

CTCallCenter *center = [[CTCallCenter alloc ] init ];

center.callEventHandler = ^(CTCall *call

{

NSLog (@"call:%@" , call .callState);

}

 

7、 iOS 4 引入了多任务支持,所以用户按下 “Home” 键以后程序可能并没有退出而是转入了后台运行。如果您想让应用直接退出,最简单的方法是:在 infoplist 里面找到 Application does not run in background 一项,勾选即可。

 

8、使UIimageView的图像旋转:

 

float rotateAngle = M_PI ;

CGAffineTransform transform =CGAffineTransformMakeRotation (rotateAngle);

imageView.transform = transform;

 

9、设置旋转的原点:

 

#import  <QuartzCore/QuartzCore.h>

UIImageView *imageView = [[UIImageView alloc ] initWithImage :[UIImage imageNamed :@"bg.png" ]];

imageView.layer.anchorPoint = CGPointMake (0.5 , 1.0 );

 

10、实现自定义的状态栏(遮盖状态栏):

CGRect frame = {{0 , 0 }, {320 , 20 }};

UIWindow* wd = [[UIWindow alloc ] initWithFrame :frame];

[wd setBackgroundColor:[ UIColor clearColor]];

[wd setWindowLevel : UIWindowLevelStatusBar];

frame = CGRectMake (100 , 0 , 30 , 20 );

UIImageView* img = [[UIImageView alloc ] initWithFrame :frame];

[img setContentMode: UIViewContentModeCenter];

[img setImage:[ UIImage imageNamed: @"00_0103.png" ]];

[wd addSubview :img];

[wd makeKeyAndVisible];

 

[ UIView beginAnimations: nil context: nil ];

[ UIView setAnimationDuration: 2 ];

frame.origin.x += 150 ;

[img setFrame :frame];

[ UIView commitAnimations];

 

11、在程序中实现电话的拨打:

 

// 添加电话图标按钮 

UIButton *btnPhone = [[ UIButton buttonWithType: UIButtonTypeCustom] retain]; 

btnPhone.frame = CGRectMake (280 ,10 ,30 ,30 ); 

UIImage *image = [UIImage imageNamed :@"phone.png" ];     

[btnPhone setBackgroundImage:image forState: UIControlStateNormal]; 

 

// 点击拨号按钮直接拨号 

[btnPhone addTarget: self action: @selector (callAction:event:) forControlEvents: UIControlEventTouchUpInside]; 

 

[cell. contentView addSubview :btnPhone];   //cell是一个 UITableViewCell 

 

// 定义点击拨号按钮时的操作 

- (void )callAction:(id )sender event:(id )event{ 

NSSet *touches = [event allTouches ]; 

UITouch *touch = [touches anyObject ]; 

CGPoint currentTouchPosition = [touch locationInView :self .listTable]; 

NSIndexPath *indexPath = [self .listTable indexPathForRowAtPoint : currentTouchPosition]; 

if (indexPath == nil ) { 

return

NSInteger section = [indexPath section ]; 

NSUInteger row = [indexPath row ]; 

NSDictionary *rowData = [datas objectAtIndex :row]; 

 

NSString *num = [[NSString alloc ] initWithFormat :@"tel://%@" ,number]; //number 为号码字符串      

[[ UIApplication sharedApplication] openURL:[ NSURL URLWithString:num]]; // 拨号  

}

 

12、更改iphone的键盘颜色:

 

1. 只有这 2种数字键盘才有效果。 UIKeyboardTypeNumberPad UIKeyboardTypePhonePad

2. keyboardAppearance UIKeyboardAppearanceAlert 

- (void )textViewDidBeginEditing:(UITextView *)textView{

NSArray *ws = [[ UIApplication sharedApplication] windows];

for (UIView *w in ws){

NSArray *vs = [w subviews ];

for (UIView *v in vs)

{

if ([[ NSString stringWithUTF8String: object_getClassName(v)] isEqualToString: @"UIKeyboard" ])

{

v. backgroundColor = [ UIColor redColor ];

}

}

}

 

13、设置时区

 

 

NSTimeZone *defaultTimeZone = [NSTimeZone defaultTimeZone ];

NSTimeZone *tzGMT = [ NSTimeZone timeZoneWithName : @"GMT" ];

[ NSTimeZone setDefaultTimeZone:tzGMT];

上面两个时区任意用一个。

 

14、Ipad隐藏键盘的同时触发方法。

 

 

[[ NSNotificationCenter defaultCenter] addObserver: self

selector :@selector (keyboardWillHide:)

name : UIKeyboardWillHideNotification

  object :nil ];

 

- (IBAction )keyboardWillHide:(NSNotification *)note

 

14、在一个程序中打开另一个程序的方法。

 

http://www.cocoachina.com/iphonedev/sdk/2010/0322/768.html

15、计算字符串的字数

-(int )calculateTextNumber:(NSString *)text

{

float number = 0.0 ;

int index = 0 ;

for (index; index < [text length ]; index++)

{

NSString *protoText = [text substringToIndex :[text length ] - index];

NSString *toChangetext = [text substringToIndex :[text length ] -1 -index];

NSString *charater;

if ([toChangetext length ]==0 )

{

charater = protoText;

}

else 

{

NSRange range = [text rangeOfString :toChangetext];

charater = [protoText stringByReplacingCharactersInRange:range withString: @"" ];

 

}

NSLog (charater);

if ([charater lengthOfBytesUsingEncoding: NSUTF8StringEncoding] == 3 )

{

number++;

}

else 

{

number = number+0.5 ;

}

}

return ceil (number);

}  

16。字符串建立类

NSString* class = [[tableViewDataobjectAtIndex:indexPath.row] objectForKey:@"class"];

  Class detailClass = NSClassFromString(class);

  UIViewController* detailViewController = [[[detailClass alloc] initWithNibName:@"BaseViewController" bundle:nil] autorelease];

 

17.release 时去掉nslog的方法   
#ifndef __OPTIMIZE__
#    define NSLog(...) NSLog(__VA_ARGS__)
#else
#    define NSLog(...) {}
#endif
 

#ifdef DEBUG

#define DebugLog(log, ...) NSLog((@"%s [Line %d]\n\t" log), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

posted on 2012-11-15 17:59  无量少年  阅读(190)  评论(0编辑  收藏  举报

导航