据说是iOS开发一年总结的笔记

来源:互联网 发布:吉他乐谱制作软件 编辑:程序博客网 时间:2024/06/05 10:18
转    据说是iOS开发一年总结的笔记,有空看看http://segmentfault.com/blog/ftd/1190000000644364iphone开发笔记退回输入键盘  - (BOOL) textFieldShouldReturn:(id)textField{    [textField  resignFirstResponder];}CGRectCGRect frame = CGRectMake (origin.x, origin.y, size.width, size.height);矩形NSStringFromCGRect(someCG) 把CGRect结构转变为格式化字符串;CGRectFromString(aString) 由字符串恢复出矩形;CGRectInset(aRect) 创建较小或较大的矩形(中心点相同),+较小  -较大CGRectIntersectsRect(rect1, rect2) 判断两矩形是否交叉,是否重叠CGRectZero 高度和宽度为零的/位于(0,0)的矩形常量CGPoint & CGSizeCGPoint aPoint = CGPointMake(x, y);   CGSize aSize = CGSizeMake(width, height);设置透明度[myView setAlpha:value];   (0.0 < value < 1.0)设置背景色[myView setBackgroundColor:[UIColor redColor]];  (blackColor;darkGrayColor;lightGrayColor;whiteColor;grayColor; redColor; greenColor;blueColor; cyanColor;yellowColor;magentaColor;orangeColor;purpleColor;brownColor; clearColor; )自定义颜色UIColor *newColor = [[UIColor alloc] initWithRed:(float) green:(float) blue:(float) alpha:(float)];      0.0~1.0竖屏320X480横屏480X320   状态栏高 (显示时间和网络状态)20 像素  导航栏、工具栏高(返回)44像素隐藏状态栏[[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 *aView;[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.pnghttp://pic002.cnblogs.com/images/2011/162291/2011121611431816.pnghttp://pic002.cnblogs.com/images/2011/162291/2011121611432897.png -(IBAction)sliderValueChanged:(id)sender{UISlider *slider = (UISlider *) sender;NSString *newText = [[NSString alloc] initWithFormat:@”%d”, (int)(slider.value + 0.5f)];label.text = newText;}活动表单<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];}else {[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 = 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";else     cell.detailTextLabel.text = @"friends";return cell;}图像、文本标签和详细文本标签图像:如果设置图像,则它显示在文本的左侧; 文本标签:这是单元的主要文本(UITableViewCellStyleDefault 只显示文本标签);详细文本标签:这是单元的辅助文本,通常用作解释性说明或标签UITableViewCellStyleSubtitleUITableViewCellStyleDefaultUITableViewCellStyleValue1UITableViewCellStyleValue2<UITableViewDelegate>#pragma mark -#pragma mark Table View Delegate Methods//把每一行缩进级别设置为其行号- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{NSUInteger row = [indexPath row];return row;}//获取传递过来的indexPath值- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{NSUInteger row = [indexPath row];if (row == 0) return nil;return indexPath;}- (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];Debug: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._anotherViewController;UIViewController内建Table View纯代码在UIViewController控制器内建Table View@interface RootViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {NSArray *timeZoneNames;}@property (nonatomic,retain) NSArray *timeZoneNames;@end(void) loadView{UITableView *tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] style: UITableViewStylePlain];tableView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingWidth);tableView.delegate = self;tableView.dataSource = self;[tableView reloadData];self.view = tableView;[tableView release];}将plist文件中的数据赋给数组NSString *thePath = [[NSBundle mainBundle] pathForResource:@"States" ofType:@"plist"];NSArray *array = [NSArray arrayWithContentsOfFile:thePath];UITouch手指的触摸范围:64X64#pragma mark -#pragma mark Touch Events- (void)touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event {originFrame = bookCover.frame;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.width;frameH = bookCover.frame.size.height;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 = currentDistance;}else if (currentDistance != initialDistance){CGFloat changedDistance = currentDistance - initialDistance;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;}else {[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 *)viewview windowGetting Touch AttributestapCount(read only) timestamp(read only) phase(read only)Getting a Touch Object's Gesture RecognizersgestureRecognizersTouch PhaseUITouchPhaseBeganUITouchPhaseMovedUITouchPhaseStationaryUITouchPhaseEndedUITouchPhaseCancelled从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 = [documentsDirectorystringByAppendingPathComponent:@"theFile.txt"];获取tmp目录NSString *tempPath = NSTemporaryDirectory();NSString *tempFile = [tempPath stringByAppendingPathComponent:@"tempFile.txt"];[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"someKey"];[[NSUserDefaults standardUserDefaults] objectForKey:aKey];自定义NavigationBarnavigationBar = [[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 = backButton;利用Safari打开一个链接NSURL *url = [NSURL URLWithString:@"http://www.cnblogs.com/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:urlcachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:5];[webView loadRequest:request];[myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL                       URLWithString: @"http://www.cnblogs.com/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 = nil;[UIApplication shareApplication].networkActivityIndicatorVisible = NO;}汉字转码NSString *oriString = @"\u67aa\u738b";NSString *escapedString = [oriStringstringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding];Checking for background support on earlier versions of iOSUIDevice *device = [UIDevice currentDevice];BOOL backgroundSupported = NO;if ([device respondsToSelector:@selector(isMultitaskingSupported)]){backgroundSupported = device.multitaskingSupported;}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:selfselector:@selector(keyboardWasShown:)name:UIKeyboardDidShowNotificationobject:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(keyboardWasHidden:)name:UIKeyboardDidHideNotificationobject:nil];}//Called when the UIKeyboardDidShowNotification is sent- (void)keyboardWasShown:(NSNotification *) aNotification{if(keyboardShown)return;NSDictionary *info = [aNotification userInfo];//get the size of the keyboard.NSValue *aValue = [info objectForKey:UIKeyboardFrameBeginUserInfoKey];CGSize keyboardSize = [aValue CGRectValue].size;//Resize the scroll viewCGRect viewFrame = [scrollView frame];viewFrame.size.height -= keyboardSize.height;//Scroll the active text field into viewCGRect 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].size;//Reset the height of the scroll view to its original valueCGRect viewFrame = [scrollView Frame];viewFrame.size.height += keyboardSize.height;scrollView.frame = viewFrame;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];}else {[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:@""])return;switch (textField.tag){case DOBField:NSDate *theDate = [dateFormatter dateFromString:textField.text];if (theDate)[inputDate setObject:theDate forKey:MyAppPersonDOBKey];break;default:break;}} 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){......}else{......}}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)];  }  @end  例如, 在我的项目中, 添加如下代码://///////////////////////////////////////////////////////  /* 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)];  }  @end  /////////////////////////////////////////////////////////  @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/2009/11/04/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 = color;     //图片填充 UIColor *color = [UIColor colorWithRed:46.0f/255.0fgreen: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 = color; } @end加载图片要及时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: http://www.cocoachina.com/bbs/simple/?t27420.htmluiwebview打开doc,pdf文件UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 55, 320, 300)];    webView.delegate = self;    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/2010/10/22/5959301.aspxiPhone游戏中既播放背景音乐又播放特效声音的办法有时候在 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/2010/10/19/5950493.aspxNSNotificationCenter用于增加回调函数[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_willBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];UINavigationBar 背景HackLOGO_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.center;       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);}@endold codeCGContextDrawImage(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), navBarImage.CGImage);hack 过logo 不再拉伸From: http://blog.163.com/fengyi1103@126/blog/static/13835627420106279102671/清除电话号码中的其他符号(源码)最近从通讯录读取电话号码,读出得号码如:134-1814-****。而我需要的为11位纯数字,一直找方法解决此问题,今天终于找到了。。分享一下……代码如下:NSString *originalString = @"(123) 123123 abc";NSMutableString *strippedString = [NSMutableString        stringWithCapacity:originalString.length];NSScanner *scanner = [NSScanner scannerWithString:originalString];NSCharacterSet *numbers = [NSCharacterSet        characterSetWithCharactersInString:@"0123456789"];while ([scanner isAtEnd] == NO) {  NSString *buffer;  if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) {    [strippedString appendString:buffer];  }  // --------- Add the following to get out of endless loop  else {     [scanner setScanLocation:([scanner scanLocation] + 1)];  }     // --------- End of addition}NSLog(@"%@", strippedString); // "123123123"From: http://stackoverflow.com/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: http://blog.163.com/fengyi1103@126/blog/static/1383562742010101611107492/修改 UITableview 滚动条颜色的方法    UITableview 的滚动条默认颜色是黑色的,如果 UItableview 背景也是深颜色,则滚动条会变的很不明显。您可以用下面这行代码来改变滚动条的颜色self.tableView.indicatorStyle=UIScrollViewIndicatorStyleWhite;当然,最后的 “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网络    } NetworkStatus;    因此可以这样检查网络状态:    Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];    switch ([r currentReachabilityStatus]) {            case NotReachable:                    // 没有网络连接                    break;            case ReachableViaWWAN:                    // 使用3G网络                    break;            case ReachableViaWiFi:                    // 使用WiFi网络                    break;    }    3.检查当前网络环境    程序启动时,如果想检测可用的网络环境,可以像这样    // 是否wifi    + (BOOL) IsEnableWIFI {        return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);    }    // 是否3G    + (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 remoteHostStatus;    }    @property NetworkStatus remoteHostStatus;    @end    // My.AppDelegate.m    #import "MyAppDelegate.h"    @implementation MyAppDelegate    @synthesize remoteHostStatus;    // 更新网络状态    - (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:@"www.apple.com"];        [[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    @class Reachability;        @interface MyAppDelegate : NSObject <UIApplicationDelegate> {            Reachability  *hostReach;        }    @end    // 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:@"www.google.com"] 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 *)response;         - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;         - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;         - (void)connectionDidFinishLoading:(NSURLConnection *)connection;     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;    }
0 0
原创粉丝点击