您的位置:首页 > 其它

iphone 技巧

2011-10-15 21:01 218 查看
在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” 键以后程序可能并没有退出而是转入了后台运行。如果您想让应用直接退出,最简单的方法是:在 info -plist 里面找到 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);

}

摘自:http://blog.sina.com.cn/s/blog_6a2cbc930100m7eh.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: