当前位置: 代码迷 >> Iphone >> iPhone开发小技能
  详细解决方案

iPhone开发小技能

热度:42   发布时间:2016-04-25 06:35:04.0
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);?
}

  相关解决方案