您的位置:首页 > 其它

iphone开发中的一些小技巧

2011-05-23 10:02 429 查看
在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: