multitasking-ad awaree是...

据说是iOS开发一年总结的笔记,有空看看
iphone开发笔记
退回输入键盘
- (BOOL) textFieldShouldReturn:(id)textField{
[textField
resignFirstResponder];
CGRect frame = CGRectMake (origin.x, origin.y, size.width, size.height);矩形
NSStringFromCGRect(someCG) 把CGRect结构转变为格式化字符串;
CGRectFromString(aString) 由字符串恢复出矩形;
CGRectInset(aRect) 创建较小或较大的矩形(中心点相同),+较小
CGRectIntersectsRect(rect1, rect2) 判断两矩形是否交叉,是否重叠
CGRectZero 高度和宽度为零的/位于(0,0)的矩形常量
CGPoint & CGSize
CGPoint aPoint = CGPointMake(x, y);
CGSize aSize = CGSizeMake(width, height);
设置透明度
[myView setAlpha:value];
(0.0 & value & 1.0)
设置背景色
[myView setBackgroundColor:[UIColor redColor]];
(blackCdarkGrayClightGrayC
whiteCgrayC redC greenC
blueC cyanCyellowC
magentaCorangeCpurpleC
brownC clearC )
自定义颜色
UIColor *newColor = [[UIColor alloc]
initWithRed:(float) green:(float) blue:(float) alpha:(float)];
状态栏高 (显示时间和网络状态)
导航栏、工具栏高(返回)
隐藏状态栏
[[UIApplication shareApplication] setStatusBarHidden: YES animated:NO]
[[UIApplication shareApplication]
setStatusBarOrientation:UIInterfaceOrientationLandscapeRight].
屏幕变动检测
orientation == UIInterfaceOrientationLandscapeLeft
window=[[UIWindow alloc] initWithFrame:[UIScreen mainScreen] bounds];
自动适应父视图大小:
aView.autoresizingSubviews = YES;
aView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
UIButton *scaleUpButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[scaleUpButton setTitle:@&放 大& forState:UIControlStateNormal];
scaleUpButton.frame = CGRectMake(40, 420, 100, 40);
[scaleUpButton addTarget:self
action:@selector(scaleUp)
forControlEvents:UIControlEventTouchUpInside];
设置视图背景图片
UIImageView *aV
[aView setImage:[UIImage imageNamed:@”name.png”]];
view1.backgroundColor = [UIColor colorWithPatternImage:
[UIImage imageNamed:@&image1.png&]];
自定义UISlider的样式和滑块
我们使用的是UISlider的setMinimumTrackImage,和setMaximumTrackImage方法来定义图片的,这两个方法可以设置滑块左边和右边的图片的,不过如果用的是同一张图片且宽度和控件宽度基本一致,就不会有变形拉伸的后果,先看代码,写在 viewDidLoad中:
//左右轨的图片
UIImage *stetchLeftTrack= [UIImage imageNamed:@&brightness_bar.png&];
UIImage *stetchRightTrack = [UIImage imageNamed:@&brightness_bar.png&];
//滑块图片
UIImage *thumbImage = [UIImage imageNamed:@&mark.png&];
UISlider *sliderA=[[UISlider alloc]initWithFrame:CGRectMake(30, 320, 257, 7)];
sliderA.backgroundColor = [UIColor clearColor];
sliderA.value=1.0;
sliderA.minimumValue=0.7;
sliderA.maximumValue=1.0;
[sliderA setMinimumTrackImage:stetchLeftTrack forState:UIControlStateNormal];
[sliderA setMaximumTrackImage:stetchRightTrack forState:UIControlStateNormal];
//注意这里要加UIControlStateHightlighted的状态,否则当拖动滑块时滑块将变成原生的控件
[sliderA setThumbImage:thumbImage forState:UIControlStateHighlighted];
[sliderA setThumbImage:thumbImage forState:UIControlStateNormal];
//滑块拖动时的事件
[sliderA addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
//滑动拖动后的事件
[sliderA addTarget:self action:@selector(sliderDragUp:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:sliderA];
为了大家实验方便,我附上背景图brightness_bar.png和滑块图mark.png
/images//1816.png
/images//2897.png
-(IBAction)sliderValueChanged:(id)sender{
UISlider *slider = (UISlider *)
NSString *newText = [[NSString alloc] initWithFormat:@”%d”, (int)(slider.value + 0.5f)];
label.text = newT
&UIActionSheetDelegate&
- (IBActive) someButtonPressed:(id) sender
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@”Are you sure?”
delegate:self
cancelButtonTitle:@”No way!”
destructiveButtonTitle:@”Yes, I’m Sure!”
otherButtonTitles:nil];
[actionSheet showInView:self.view];
[actionSheet release];
&UIAlertViewDelegate&
- (void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger) buttonIndex
if(buttonIndex != [actionSheet cancelButtonIndex])
NSString *message = [[NSString alloc] initWithFormat:@”You can
breathe easy, everything went OK.”];
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@”Something was done”
message:message
delegate:self
cancelButtonTitle:@”OK”
otherButtonTitles:nil];
[alert show];
[alert release];
[message release];
-(void)doChange:(id)sender
if(view2 == nil)
[self loadSec];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[UIView setAnimationTransition:([view1 superview]?UIViewAnimationTransitionFlipFromLeft:UIViewAnimationTransitionFlipFromRight)forView:self.view cache:YES];
if([view1 superview]!= nil)
[view1 removeFromSuperview];
[self.view addSubview:view2];
[view2 removeFromSuperview];
[self.view addSubview:view1];
[UIView commitAnimations];
Table View
&UITableViewDateSource&
#pragma mark -
#pragma mark Table View Data Source Methods
//指定分区中的行数,默认为1
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
return [self.listData count];
//设置每一行cell显示的内容
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *SimpleTableIndentifier = @&SimpleTableIndentifier&;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIndentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:SimpleTableIndentifier]
autorelease];
UIImage *image = [UIImage imageNamed:@&13.gif&];
cell.imageView.image =
NSUInteger row = [indexPath row];
cell.textLabel.text = [listData objectAtIndex:row];
cell.textLabel.font = [UIFont boldSystemFontOfSize:20];
if(row & 5)
cell.detailTextLabel.text = @&Best friends&;
cell.detailTextLabel.text = @&friends&;
图像、文本标签和详细文本标签
图像:如果设置图像,则它显示在文本的左侧; 文本标签:这是单元的主要文本(UITableViewCellStyleDefault 只显示文本标签);详细文本标签:这是单元的辅助文本,通常用作解释性说明或标签
UITableViewCellStyleSubtitle
UITableViewCellStyleDefault
UITableViewCellStyleValue1
UITableViewCellStyleValue2
&UITableViewDelegate&
#pragma mark -
#pragma mark Table View Delegate Methods
//把每一行缩进级别设置为其行号
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
NSUInteger row = [indexPath row];
//获取传递过来的indexPath值
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSUInteger row = [indexPath row];
if (row == 0)
return indexP
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSUInteger row = [indexPath row];
NSString *rowValue = [listData objectAtIndex:row];
NSString *message = [[NSString alloc] initWithFormat:@&You selected %@&,rowValue];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@&Row Selected&
message:message
delegate:nil
cancelButtonTitle:@&Yes, I did!&
otherButtonTitles:nil];
[alert show];
[alert release];
[message release];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
//设置行的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
return 40;
NavigationController 推出push 推出pop
[self.navigationController pushViewController:_detailController animated:YES];
[self.navigationController popViewControllerAnimated:YES];
NSLog(@&%s %d&, __FUNCTION__, __LINE__);
点击textField外的地方回收键盘
先定义一个UIControl类型的对象,在上面可以添加触发事件,令SEL实践为回收键盘的方法,最后将UIControl的实例加到当前View上。
UIControl *m_control = [[UIControl alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[m_control addTarget:self action:@selector(keyboardReturn)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:m_control];
- (void) keyboardReturn
[aTextField resignFirstResponder];
键盘覆盖输入框
当键盘调出时将输入框覆盖时,可以用下方法:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
[self.view setFrame:CGRectMake(0, -100, 320, 480) ];
return YES;
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
[self.view setFrame:CGRectMake(0, 0, 320, 480)];
return YES;
当准备输入时,将视图的位置上调100,这样键盘就不能覆盖到输入框。
当依赖注入方法不好使时,可以在AppDelegate内申明一个全局的控制器实例_anotherViewController,在另一个需要使用_anotherViewController的地方定义以下委托方法,使用共享的UIApplication实例来获取该委托的引用
SomeAppDelegate *appDelegate = (SomeAppDelegate *)[[UIApplication sharedApplication] delegate];
_anotherViewController = appDelegate._anotherViewC
UIViewController内建Table View
纯代码在UIViewController控制器内建Table View
@interface RootViewController : UIViewController &UITableViewDelegate, UITableViewDataSource& {
NSArray *timeZoneN
@property (nonatomic,retain) NSArray *timeZoneN
(void) loadView
UITableView *tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] style: UITableViewStylePlain];
tableView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingWidth);
tableView.delegate =
tableView.dataSource =
[tableView reloadData];
self.view = tableV
[tableView release];
将plist文件中的数据赋给数组
NSString *thePath = [[NSBundle mainBundle] pathForResource:@&States& ofType:@&plist&];
NSArray *array = [NSArray arrayWithContentsOfFile:thePath];
手指的触摸范围:64X64
#pragma mark -
#pragma mark Touch Events
- (void)touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event {
originFrame = bookCover.
NSLog(@&%s %d&, __FUNCTION__,__LINE__);
if ([touches count] == 2)
NSArray *twoTouches = [touches allObjects];
UITouch *firstTouch = [twoTouches objectAtIndex:0];
UITouch *secondTouch = [twoTouches objectAtIndex:1];
CGPoint firstPoint = [firstTouch locationInView:bookCover];
CGPoint secondPoint = [secondTouch locationInView:bookCover];
CGFloat deltaX = secondPoint.x - firstPoint.x;
CGFloat deltaY = secondPoint.y - firstPoint.y;
initialDistance = sqrt(deltaX * deltaX + deltaY * deltaY );
frameX = bookCover.frame.origin.x;
frameY = bookCover.frame.origin.y;
frameW = bookCover.frame.size.
frameH = bookCover.frame.size.
NSLog(@&%s %d&, __FUNCTION__,__LINE__);
- (void)touchesMoved:(NSSet *) touches withEvent:(UIEvent *) event {
if([touches count] == 2)
NSLog(@&%s %d&, __FUNCTION__,__LINE__);
NSArray *twoTouches = [touches allObjects];
UITouch *firstTouch = [twoTouches objectAtIndex:0];
UITouch *secondTouch = [twoTouches objectAtIndex:1];
CGPoint firstPoint = [firstTouch locationInView:bookCover];
CGPoint secondPoint = [secondTouch locationInView:bookCover];
CGFloat deltaX = secondPoint.x - firstPoint.x;
CGFloat deltaY = secondPoint.y - firstPoint.y;
CGFloat currentDistance = sqrt(deltaX * deltaX + deltaY * deltaY );
if (initialDistance == 0) {
initialDistance = currentD
else if (currentDistance != initialDistance)
CGFloat changedDistance = currentDistance - initialD
NSLog(@&changedDistance = %f&,changedDistance);
[bookCover setFrame:CGRectMake(frameX - changedDistance / 2,
frameY - (changedDistance * frameH) / (2 * frameW),
frameW + changedDistance,
frameH + (changedDistance * frameH) / frameW)];
- (void)touchesEnded:(NSSet *) touches withEvent:(UIEvent *) event {
UITouch *touch = [touches anyObject];
UITouch双击图片变大/还原
if ([touch tapCount] == 2)
NSLog(@&%s %d&, __FUNCTION__,__LINE__);
if (!flag) {
[bookCover setFrame:CGRectMake(bookCover.frame.origin.x - bookCover.frame.size.width / 2,
bookCover.frame.origin.y - bookCover.frame.size.height / 2,
2 * bookCover.frame.size.width,
2 * bookCover.frame.size.height)];
flag = YES;
[bookCover setFrame:CGRectMake(bookCover.frame.origin.x + bookCover.frame.size.width / 4, bookCover.frame.origin.y + bookCover.frame.size.height / 4,
bookCover.frame.size.width / 2, bookCover.frame.size.height / 2)];
flag = NO;
Get the Location of Touches
(CGPoint)locationInView:(UIView *)view
(CGPoint)previousLocationInView:(UIView *)view
view window
Getting Touch Attributes
tapCount(read only) timestamp(read only) phase(read only)
Getting a Touch Object's Gesture Recognizers
gestureRecognizers
Touch Phase
UITouchPhaseBegan
UITouchPhaseMoved
UITouchPhaseStationary
UITouchPhaseEnded
UITouchPhaseCancelled
从Plist里读内容
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@&book& ofType:@&plist&];
NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
NSString *book = [dictionary objectForKey:bookTitle];
[textView setText:book];
(void) initialize {
NSUserDefaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@&YES& forKey:@&DeleteBackup&];
[defaults registerDefaults:appDefaults];
To get a value of a default, use the valueForKey: method:
[[theDefaultsController values] valueForKey:@&userName&];
To set a value for a default, use setValue:forKey:
[[theDefaultsController values] setValue:newUserName forKey:@&userName&];
[[NSUserDefaults standardUserDefaults] setValue:aVale forKey:aKey];
[[NSUserDefaults standardUserDefaults] valueForKey:aKey];
获取Documents目录
NSArray *paths = NSSearchPathForDictionariesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filename = [documentsDirectory
stringByAppendingPathComponent:@&theFile.txt&];
获取tmp目录
NSString *tempPath = NSTemporaryDirectory();
NSString *tempFile = [tempPath stringByAppendingPathComponent:@&tempFile.txt&];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@&someKey&];
[[NSUserDefaults standardUserDefaults] objectForKey:aKey];
自定义NavigationBar
navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[navigationBar setBarStyle:UIBarStyleBlackOpaque];
myNavigationItem = [[UINavigationItem alloc] initWithTitle:@&Setting&];
[navigationBar setItems:[NSArray arrayWithObject:myNavigationItem]];
[self.view addSubview:navigationBar];
backButton = [[UIBarButtonItem alloc] initWithTitle:@&Back& style:UIBarButtonItemStylePlain target:self action:@selector(back)];
myNavigationItem.leftBarButtonItem = backB
利用Safari打开一个链接
NSURL *url = [NSURL URLWithString:@&/tracy-e/&];
[[UIApplication sharedApplication] openURL:url];
利用UIWebView显示pdf文件、网页。。。
webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[webView setDelegate:self];
[webView setScalesPageToFit:YES];
[webView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
[webView setAllowsInlineMediaPlayback:YES];
[self.view addSubview:webView];
NSString *pdfPath = [[NSBundle mainBundle] pathForResource:@&ojc& ofType:@&pdf&];
NSURL *url = [NSURL fileURLWithPath:pdfPath];
NSURLRequest *request = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:5];
[webView loadRequest:request];
[myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL
URLWithString: @&/tracy-e/&]]];
NSString *errorString = [NSString stringWithFormat:@&&html&&center&&font size=
+5 color ='red'&An Error Occurred:&br&%@&/fone&&/center&&/html&&,error];
[myWebView loadHTMLString:errorString baseURL:nil];
//Stopping a load request when the view is to disappear
- (void)viewWillDisappear:(BOOL)animate{
if ([myWebView loading]){
[myWebView stopLoading];
myWebView.delegate =
[UIApplication shareApplication].networkActivityIndicatorVisible = NO;
NSString *oriString = @&\u67aa\u738b&;
NSString *escapedString = [oriString
stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
Checking for background support on earlier versions of iOS
UIDevice *device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)]){
backgroundSupported = device.multitaskingS
Being a Responsible,Multitasking-Aware Application
# Do not make any OpenGL ES calls from your code.
# Cancel any Bonjour-related services before being suspended.
# Be prepared to handle connection failures in your network-based sockets.
# Save your application state before moving to the background.
# Release any unneeded memory when moving to the background.
# Stop using shared system resources before being suspended.
# Avoid updating your windows and views.
# Respond to connect and disconnect notification for external accessories.
# Clean up resource for active alerts when moving to the background.
# Remove sensitive information from views before moving to the background.
# Do minimal work while running in the background.
Handing the Keyboard notifications
//Call this method somewhere in your view controller setup code
- (void) registerForKeyboardNotifications{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasHidden:)
name:UIKeyboardDidHideNotification
object:nil];
//Called when the UIKeyboardDidShowNotification is sent
- (void)keyboardWasShown:(NSNotification *) aNotification{
if(keyboardShown)
NSDictionary *info = [aNotification userInfo];
//get the size of the keyboard.
NSValue *aValue = [info objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGSize keyboardSize = [aValue CGRectValue].
//Resize the scroll view
CGRect viewFrame = [scrollView frame];
viewFrame.size.height -= keyboardSize.
//Scroll the active text field into view
CGRect textFieldRect = [activeField frame];
[scrollView scrollRectToVisible:textFieldRect animated:YES];
keyboardShown = YES;
//Called when the UIKeyboardDidHideNotification is sent
- (void)keyboardWasHidden:(NSNotification *) aNotification{
NSDictionary *info = [aNotification userInfo];
//Get the size of the keyboard.
NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGSize keyboardSize = [aValue CGRectValue].
//Reset the height of the scroll view to its original value
CGRect viewFrame = [scrollView Frame];
viewFrame.size.height += keyboardSize.
scrollView.frame = viewF
keyboardShown = NO;
点击键盘的next按钮,在不同的textField之间换行
//首先给不同的textField赋不同的且相邻的tag值
- (BOOL)textFieldShouldReturn:(UITextField *)textField
if ([textField returnKeyType] != UIReturnKeyDone)
NSInteger nextTag = [textField tag] + 1;
UIView *nextTextField = [[self tableView] viewWithTag:nextTag];
[nextTextField becomeFirstResponder];
[textField resignFirstResponder];
return YES;
Configuring a date formatter
- (void)viewDidLoad {
[super viewDidLoad];
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setGeneratesCalendarDates:YES];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setCalendar:[NSCalendar autoupdatingCurrentCalendar]];
[dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
DOB.placeholder = [NSString stringWithFormat:@&Example: %@&,[dateFormatter stringFromDate:[NSDate date]]];
- (void)textFieldDidEndEditing:(UITextField *)textField{
[textField resignFirstResponder];
if ([textField.text isEqualToString:@&&])
switch (textField.tag){
case DOBField:
NSDate *theDate = [dateFormatter dateFromString:textField.text];
if (theDate)
[inputDate setObject:theDate forKey:MyAppPersonDOBKey];
tableView的cell高度
tableView的cell高度除了在delegate中指定外,还可以在任意位置以[tableView setRowHeight:44]的方式指定
[[self navigationItem] setLeftBarButtonItem:[self editButtonItem]];
- (void)setEditing:(BOOL)editing animated:(BOOL)animated{
[super setEditing:editing animated:animated];
if (editing){
One added a subview to a view, release the subview to avoid the extra retain count of it, Because when you insert a view as a subview using addSubview:, the subview is retained by its superview. When you remove the subview from its superview using the removeFromSuperview: method, subview is autoreleased.
为UINavigationBar设置背景图片
在iPhone开发中, 有时候我们想给导航条添加背景图片, 实现多样化的导航条效果, 用其他方法往往无法达到理想的效果, 经过网上搜索及多次实验, 确定如下最佳实现方案:
为UINavigatonBar增加如下Category(类别:提供一种为某个类添加方法而又不必编写子类的途径,类别只能添加成员函数,不能添加数据成员):
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @&NavigationBar.png&];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
例如, 在我的项目中, 添加如下代码:
/////////////////////////////////////////////////////////
/* input: The image and a tag to later identify the view */
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @&title_bg.png&];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
/////////////////////////////////////////////////////////
@implementation FriendsPageViewController
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
self.navigationBar.tintColor = [UIColor purpleColor];
[self initWithRootViewController:[[RegPageViewController alloc] init]];
[super viewDidLoad];
实现的效果如下图:
转载,原文地址 http://blog.csdn.net/wave_1102/archive//4768212.aspx
为UINavigationBar添加自定义背景
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
//颜色填充
UIColor *color = [UIColor redColor];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColor(context, CGColorGetComponents( [color CGColor]));
CGContextFillRect(context, rect);
self.tintColor =
//图片填充
UIColor *color = [UIColor colorWithRed:46.0f/255.0f
green:87.0f/255.0f blue:29.0f/255.0f alpha:1.0f];
UIImage *img
= [UIImage imageNamed: @&bg.png&];
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
self.tintColor =
加载图片要及时release
你还在使用myImage = [UIImage imageNamed:@&icon.png&]; 吗?
如题,是不是大家为了方便都这样加载图片啊
myImage = [UIImage imageNamed:@&icon.png&];
那么小心了
这种方法在一些图片很少,或者图片很小的程序里是ok的。
但是,在大量加载图片的程序里,请千万不要这样做。
为什么呢 ???????
这种方法在application bundle的顶层文件夹寻找由供应的名字的图象。 如果找到图片,装载到iPhone系统缓存图象。那意味图片是(理论上)放在内存里作为cache的。
试想你图片多了,是什么后果?
图片cache极有可能不会响应 memory warnings and release its objects
所以,用图片的时候一定要小心的alloc和release。
推荐使用 NSString *path = [[NSBundle mainBundle] pathForResource:@&icon& ofType:@&png&];
myImage = [UIImage imageWithContentsOfFile:path];
// Todo use of myImage
[myImage release];
From: /bbs/simple/?t27420.html
uiwebview打开doc,pdf文件
UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 55, 320, 300)];
webView.delegate =
webView.multipleTouchEnabled = YES;
webView.scalesPageToFit = YES;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *docPath = [documentsDirectory stringByAppendingString:@&/doc2003_1.doc&];
NSLog(@&#######%@&,docPath);
NSURL *url = [NSURL fileURLWithPath:docPath];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
[self.view addSubview:webView];
[webView release];
From:http://blog.csdn.net/dadalan/archive//5959301.aspx
iPhone游戏中既播放背景音乐又播放特效声音的办法
有时候在 iPhone 游戏中,既要播放背景音乐,同时又要播放比如枪的开火音效。此时您可以试试以下方法
NSString *musicFilePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@&wav&];
//创建音乐文件路径
NSURL *musicURL = [[NSURL alloc] initFileURLWithPath:musicFilePath];
AVAudioPlayer* musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:musicURL error:nil];
[musicURL release];
[musicPlayer prepareToPlay];
//[musicPlayer setVolume:1];
//设置音量大小
//musicPlayer .numberOfLoops = -1;//设置音乐播放次数
-1为一直循环
要导入框架 AVFoundation.framework,头文件中 #import &AVFoundation/AVFoundation.h&;做成类的话则更方便。
From: http://blog.csdn.net/dadalan/archive//5950493.aspx
NSNotificationCenter用于增加回调函数
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_willBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];
UINavigationBar 背景Hack
LOGO_320×44.png 图片显示在背景上,
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
//加入旋转坐标系代码
// Drawing code
UIImage *navBarImage = [UIImage imageNamed:@&LOGO_320×44.png&];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, self.frame.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGPoint center=self.
CGImageRef cgImage= CGImageCreateWithImageInRect(navBarImage.CGImage, CGRectMake(0, 0, 1, 44));
CGContextDrawImage(context, CGRectMake(center.x-160-80, 0, 80, self.frame.size.height), cgImage);
CGContextDrawImage(context, CGRectMake(center.x-160, 0, 320, self.frame.size.height), navBarImage.CGImage);
CGContextDrawImage(context, CGRectMake(center.x+160, 0, 80, self.frame.size.height), cgImage);
CGContextDrawImage(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), navBarImage.CGImage);
hack 过logo 不再拉伸
From: /fengyi/blog/static//
清除电话号码中的其他符号(源码)
最近从通讯录读取电话号码,读出得号码如:134-1814-****。
而我需要的为11位纯数字,一直找方法解决此问题,今天终于找到了。。
分享一下……
代码如下:
NSString *originalString = @&(123) 123123 abc&;
NSMutableString *strippedString = [NSMutableString
stringWithCapacity:originalString.length];
NSScanner *scanner = [NSScanner scannerWithString:originalString];
NSCharacterSet *numbers = [NSCharacterSet
characterSetWithCharactersInString:@&&];
while ([scanner isAtEnd] == NO) {
NSString *
if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) {
[strippedString appendString:buffer];
// --------- Add the following to get out of endless loop
[scanner setScanLocation:([scanner scanLocation] + 1)];
// --------- End of addition
NSLog(@&%@&, strippedString); // &&
From: /questions/1129521/remove-all-but-numbers-from-nsstring
正则判断:字符串只包含字母和数字
NSString *mystring = @&Letter1234&;
NSString *regex = @&[a-z][A-Z][0-9]&;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@&SELF MATCHES %@&, regex];
if ([predicate evaluateWithObject:mystring] == YES) {
//implement
一行代码设置 UITableViewCell 与导航条间距
UITableView 的 cell 默认出现在 uitableview 的第一行,如果你想自定义 UITableViewCell 与导航条间距的话,可以使用下面这行代码
tableview.tableHeaderView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)]autorelease];
From: /fengyi/blog/static/2/
修改 UITableview 滚动条颜色的方法
UITableview 的滚动条默认颜色是黑色的,如果 UItableview 背景也是深颜色,则滚动条会变的很不明显。您可以用下面这行代码来改变滚动条的颜色
self.tableView.indicatorStyle=UIScrollViewIndicatorStyleW
当然,最后的 “White” 也可以换成其它颜色。
下文件之前获取到文件大小的代码
下面这段代码,能实现在下载文件之前获得文件大小,应用在软件里,能在很大程度上改善用户体验
[m_pASIHTTPRequest setDidReceiveResponseHeadersSelector:@selector(didReceiveResponseHeaders:)];
- (void)didReceiveResponseHeaders:(ASIHTTPRequest *)request
NSLog(@&didReceiveResponseHeaders %@&,[m_request.responseHeaders valueForKey:@&Content-Length&]);
网络编程总结 iphone
一:确认网络环境3G/WIFI
1. 添加源文件和framework
开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审(我们的)查的。
Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。要在应用程序程序中使用Reachability,首先要完成如下两部:
1.1. 添加源文件:
在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。如下图:
1.2.添加framework:
将SystemConfiguration.framework 添加进工程。如下图:
2. 网络状态
Reachability.h中定义了三种网络状态:
typedef enum {
NotReachable = 0,
ReachableViaWiFi,
//使用3G/GPRS网络
ReachableViaWWAN
//使用WiFi网络
} NetworkS
因此可以这样检查网络状态:
Reachability *r = [Reachability reachabilityWithHostName:@“”];
switch ([r currentReachabilityStatus]) {
case NotReachable:
// 没有网络连接
case ReachableViaWWAN:
// 使用3G网络
case ReachableViaWiFi:
// 使用WiFi网络
3.检查当前网络环境
程序启动时,如果想检测可用的网络环境,可以像这样
// 是否wifi
+ (BOOL) IsEnableWIFI {
return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
+ (BOOL) IsEnable3G {
return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
- (void)viewWillAppear:(BOOL)animated {
if (([Reachability reachabilityForInternetConnection].currentReachabilityStatus == NotReachable) &&
([Reachability reachabilityForLocalWiFi].currentReachabilityStatus == NotReachable)) {
self.navigationItem.hidesBackButton = YES;
[self.navigationItem setLeftBarButtonItem:nil animated:NO];
4. 链接状态的实时通知
网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户:
Reachability 1.5版本
// My.AppDelegate.h
#import &Reachability.h&
@interface MyAppDelegate : NSObject &UIApplicationDelegate& {
NetworkStatus remoteHostS
@property NetworkStatus remoteHostS
// My.AppDelegate.m
#import &MyAppDelegate.h&
@implementation MyAppDelegate
@synthesize remoteHostS
// 更新网络状态
- (void)updateStatus {
self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
// 通知网络状态
- (void)reachabilityChanged:(NSNotification *)note {
[self updateStatus];
if (self.remoteHostStatus == NotReachable) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@&AppName&, nil)
message:NSLocalizedString (@&NotReachable&, nil)
delegate:nil cancelButtonTitle:@&OK& otherButtonTitles: nil];
[alert show];
[alert release];
// 程序启动器,启动网络监视
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// 设置网络检测的站点
[[Reachability sharedReachability] setHostName:@&&];
[[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES];
// 设置网络状态变化时的通知函数
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)
name:@&kNetworkReachabilityChangedNotification& object:nil];
[self updateStatus];
- (void)dealloc {
// 删除通知对象
[[NSNotificationCenter defaultCenter] removeObserver:self];
[window release];
[super dealloc];
Reachability 2.0版本
// MyAppDelegate.h
@interface MyAppDelegate : NSObject &UIApplicationDelegate& {
Reachability
// MyAppDelegate.m
- (void)reachabilityChanged:(NSNotification *)note {
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
NetworkStatus status = [curReach currentReachabilityStatus];
if (status == NotReachable) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@&AppName&&
message:@&NotReachable&
delegate:nil
cancelButtonTitle:@&YES& otherButtonTitles:nil];
[alert show];
[alert release];
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// 监测网络情况
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name: kReachabilityChangedNotification
object: nil];
hostReach = [[Reachability reachabilityWithHostName:@&&] retain];
hostReach startNotifer];
二:使用NSConnection下载数据
1.创建NSConnection对象,设置委托对象
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[self urlString]]];
[NSURLConnection connectionWithRequest:request delegate:self];
2. NSURLConnection delegate委托方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)
- (void)connectionDidFinishLoading:(NSURLConnection *)
3. 实现委托方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
// store data
[self.receivedData setLength:0];
//通常在这里先清空接受数据的缓存
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
/* appends the new data to the received data */
[self.receivedData appendData:data];
//可能多次收到数据,把新的数据添加在现有数据最后
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
// 错误处理
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// disconnect
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
NSString *returnString = [[NSString alloc] initWithData:self.receivedData encoding:NSUTF8StringEncoding];
NSLog(returnString);
[self urlLoaded:[self urlString] data:self.receivedData];
firstTimeDownloaded = YES;
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:609次
排名:千里之外
原创:92篇

我要回帖

更多关于 ad aware 的文章

 

随机推荐