iOS開發(fā)中最有用關(guān)鍵的代碼合集
本文整理了,在iOS開發(fā)中我們所遇到一些開發(fā)問題的技巧類的代碼,讓你在開發(fā)過程中避免了很多彎路,希望能給你的開發(fā)帶來幫助和啟發(fā)。
- // 利用正則表達(dá)式驗(yàn)證 -( BOOL )isValidateEmail:( NSString *)email
- {
- 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 :email];
- }
- 用法: UIImage *yourImage= [self imageWithImageSimple:image scaledToSize:CGSizeMake(210.0, 210.0)]; // 壓縮圖片 - ( UIImage *)imageWithImageSimple:( UIImage *)image scaledToSize:( CGSize )newSize
- {
- // Create a graphics image context UIGraphicsBeginImageContext (newSize);
- // Tell the old image to draw in this newcontext, with the desired // new size [image drawInRect : CGRectMake ( 0 , 0 ,newSize. width ,newSize. height )];
- // Get the new image from the context UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext ();
- // End the context UIGraphicsEndImageContext ();
- // Return the new image. return newImage;
- }
- - ( IBAction )uploadButton:( id )sender {
- UIImage *image = [ UIImage imageNamed : @"1.jpg" ]; // 圖片名 NSData *imageData = UIImageJPEGRepresentation (image, 0.5 );// 壓縮比例 NSLog ( @" 字節(jié)數(shù) :%i" ,[imageData length]);
- // post url NSString *urlString = @"http://192.168.1.113:8090/text/UploadServlet" ;
- // 服務(wù)器地址 // setting up the request object now NSMutableURLRequest *request = [[ NSMutableURLRequest alloc ] init ] ;
- [request setURL :[ NSURL URLWithString :urlString]];
- [request setHTTPMethod : @"POST" ];
- // NSString *boundary = [ NSString stringWithString : @"---------------------------14737809831466499882746641449" ];
- NSString *contentType = [ NSString stringWithFormat : @"multipart/form-data;boundary=%@" ,boundary];
- [request addValue :contentType forHTTPHeaderField : @"Content-Type" ];
- // NSMutableData *body = [ NSMutableData data ];
- [body appendData :[[ NSString stringWithFormat : @"\r\n--%@\r\n" ,boundary] dataUsingEncoding : NSUTF8StringEncoding ]];
- [body appendData :[[ NSString stringWithString : @"Content-Disposition:form-data; name=\"userfile\"; filename=\"2.png\"\r\n" ] dataUsingEncoding : NSUTF8StringEncoding ]]; // 上傳上去的圖片名字 [body appendData :[[ NSString stringWithString : @"Content-Type: application/octet-stream\r\n\r\n" ] dataUsingEncoding : NSUTF8StringEncoding ]];
- [body appendData :[ NSData dataWithData :imageData]];
- [body appendData :[[ NSString stringWithFormat : @"\r\n--%@--\r\n" ,boundary] dataUsingEncoding : NSUTF8StringEncoding ]];
- [request setHTTPBody :body];
- // NSLog(@"1-body:%@",body); NSLog ( @"2-request:%@" ,request);
- NSData *returnData = [ NSURLConnection sendSynchronousRequest :request returningResponse : nil error : nil ];
- NSString *returnString = [[ NSString alloc ] initWithData :returnData encoding : NSUTF8StringEncoding ];
- NSLog ( @"3- 測(cè)試輸出: %@" ,returnString );
- UIImage *myImage = [ UIImage imageNamed : @"1.jpg" ];
- [ imageView setImage :myImage];
- [ self . view addSubview : imageView ];
- 選擇相冊(cè): UIImagePickerControllerSourceTypesourceType=UIImagePickerControllerSourceTypeCamera;
- if (![UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
- sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
- }
- UIImagePickerController * picker = [[UIImagePickerControlleralloc]init];
- picker.delegate = self;
- picker.allowsEditing=YES;
- picker.sourceType=sourceType;
- [self presentModalViewController:picker animated:YES];
- 選擇完畢: -(void)imagePickerController:(UIImagePickerController*)pickerdidFinishPickingMediaWithInfo:(NSDictionary *)info
- {
- [picker dismissModalViewControllerAnimated:YES];
- UIImage * image=[info objectForKey:UIImagePickerControllerEditedImage];
- [self performSelector:@selector(selectPic:) withObject:imageafterDelay:0.1];
- }
- -(void)selectPic:(UIImage*)image
- {
- NSLog(@"image%@",image);
- imageView = [[UIImageView alloc] initWithImage:image];
- imageView.frame = CGRectMake(0, 0, image.size.width, image.size.height);
- [self.viewaddSubview:imageView];
- [self performSelectorInBackground:@selector(detect:) withObject:nil];
- }
- detect 為自己定義的方法,編輯選取照片后要實(shí)現(xiàn)的效果 取消選擇: -(void)imagePickerControllerDIdCancel:(UIImagePickerController*)picker
- {
- [picker dismissModalViewControllerAnimated:YES];
- }
- nextWebView = [[ WEBViewController alloc ] initWithNibName : @"WEBViewController" bundle : nil ];
- [ self presentModalViewController : nextWebView animated : YES ];
- UIBarButtonItem *rightButton = [[ UIBarButtonItem alloc ] initWithTitle : @" 右邊 " style : UIBarButtonItemStyleDone target : self action : @selector (clickRightButton)];
- [ self . navigationItem setRightBarButtonItem :rightButton];
8.設(shè)置navigationBar隱藏
- self . navigationController . navigationBarHidden = YES ;//
- UIView *footerView = [[UIView alloc]initWithFrame:CGRectMake(10, 100, 300, 180)]; UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 100, 300, 150)]; label.text = @"Hello world! Hello world!Hello world! Hello world! Hello world! Hello world! Hello world! Hello world!Hello world! Hello world! Hello world! Hello world! Hello world! Helloworld!"; // 背景顏色為紅色 label.backgroundColor = [UIColor redColor]; // 設(shè)置字體顏色為白色 label.textColor = [UIColor whiteColor]; // 文字居中顯示 label.textAlignment = UITextAlignmentCenter; // 自動(dòng)折行設(shè)置 label.lineBreakMode = UILineBreakModeWordWrap; label.numberOfLines = 0;
- CGRect frame = CGRectMake ( 0 , 400 , 72.0 , 37.0 );
- UIButton *button = [ UIButton buttonWithType : UIButtonTypeRoundedRect ];
- button. frame = frame;
- [button setTitle : @" 新添加的按鈕 " forState: UIControlStateNormal ];
- button. backgroundColor = [ UIColor clearColor ];
- button. tag = 2000 ;
- [button addTarget : self action : @selector (buttonClicked:) forControlEvents : UIControlEventTouchUpInside ];
- [ self . view addSubview :button];
10.2在xib文件中已經(jīng)創(chuàng)建好Button,通過tag獲取按鈕
- UIButton *testButton= (UIButton*)[self.view viewWithTag:100];
- [testButton addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];
//按鈕事件
- -(void) test: (id) sender{
- UIAlertView *av = [[[UIAlertView alloc] initWithTitle:@"ceshi" message:@"test11111" delegate:nil cancelButtonTitle:@"OK"otherButtonTitles:nil] autorelease];
- [av show];
- }
11.讓某個(gè)控件在View的中心位置顯示:
- cell.backgroundColor = [UIColorscrollViewTexturedBackgroundColor];
- // 設(shè)置文字的字體
- cell.textLabel.font = [UIFont fontWithName:@"AmericanTypewriter" size:100.0f];
- // 設(shè)置文字的顏色
- cell.textLabel.textColor = [UIColor orangeColor];
- // 設(shè)置文字的背景顏色
- cell.textLabel.shadowColor = [UIColor whiteColor];
- // 設(shè)置文字的顯示位置
- cell.textLabel.textAlignment = UITextAlignmentCenter;
在程序的 viewDidLoad 中加入
- [[UIApplication sharedApplication]setStatusBarHidden:YES animated:NO];
14.更改AlertView背景:
- UIAlertView *theAlert = [[[UIAlertViewalloc] initWithTitle:@"Atention"
- message: @"I'm a Chinese!"
- delegate:nil
- cancelButtonTitle:@"Cancel"
- otherButtonTitles:@"Okay",nil] autorelease];
- [theAlert show];
- UIImage *theImage = [UIImageimageNamed:@"loveChina.png"];
- theImage = [theImage stretchableImageWithLeftCapWidth:0topCapHeight:0];
- CGSize theSize = [theAlert frame].size;
- UIGraphicsBeginImageContext(theSize);
- [theImage drawInRect:CGRectMake(5, 5, theSize.width-10, theSize.height-20)];// 這個(gè)地方的大小要自己調(diào)整,以適應(yīng) alertview 的背景顏色的大小。
- theImage = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- theAlert.layer.contents = (id)[theImage CGImage];
15.鍵盤透明:
- textField.keyboardAppearance = UIKeyboardAppearanceAlert;
16.狀態(tài)欄的網(wǎng)絡(luò)活動(dòng)風(fēng)火輪是否旋轉(zhuǎn):
- [UIApplication sharedApplication].networkActivityIndicatorVisible , 默認(rèn)值是 NO 。
17.截取屏幕圖片:
- // 創(chuàng)建一個(gè)基于位 圖的圖形上下文并指定大小為CGSizeMake(200,400)
- UIGraphicsBeginImageContext(CGSizeMake(200,400));
- //renderInContext 呈現(xiàn)接受者及其子范圍到 指定的上下文
- [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
- // 返回 一個(gè)基于當(dāng)前圖形上下文的圖片
- UIImage *aImage = UIGraphicsGetImageFromCurrentImageContext();
- // 移除棧頂 的基于當(dāng)前位圖的圖形上下文
- UIGraphicsEndImageContext();
- // 以 png 格式 返回指定圖片的數(shù)據(jù)
- imageData = UIImagePNGR epresentation(aImage);
18.更改cell選中的背景:
- UIView *myview = [[UIView alloc] init];
- myview.frame = CGRectMake(0, 0, 320, 47);
- myview.backgroundColor = [UIColorcolorWithPatternImage:[UIImage imageNamed:@"0006.png"]];
- cell.selectedBackgroundView = myview;:
19.顯示圖片:
- CGRect myImageRect = CGRectMake(0.0f, 0.0f, 320.0f, 109.0f);
- UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];
- [myImage setImage:[UIImage imageNamed:@"myImage.png"]];
- myImage.opaque = YES; //opaque 是否透明
- [self.view addSubview:myImage];
- NSString*imagePath = [[NSBundle mainBundle] pathForResource:@"XcodeCrash"ofType:@"png"];
- UIImage *image = [[UIImage alloc]initWithContentsOfFile:imagePath];
- UIImage *newImage= [image transformWidth:80.f height:240.f];
- UIImageView *imageView = [[UIImageView alloc]initWithImage: newImage];
- [newImagerelease];
- [image release];
- [self.view addSubview:imageView];
21. 實(shí)現(xiàn)點(diǎn)擊圖片進(jìn)行跳轉(zhuǎn)的代碼:(生成一個(gè)帶有背景圖片的button,給button綁定想要的事件)
- UIButton *imgButton=[[UIButton alloc]initWithFrame:CGRectMake(0, 0, 120, 120)];
- [imgButton setBackgroundImage:(UIImage *)[self.imgArray objectAtIndex:indexPath.row] forState:UIControlStateNormal];
- imgButton.tag=[indexPath row];
- [imgButton addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
22.鍵盤回收:
1).增加一個(gè)button,相應(yīng)touch down事件,隱藏鍵盤。這種方法,太山寨了。為了相應(yīng)一個(gè)事件增加一個(gè)button太不值得的。
- .h
- - (IBAction)dismissKeyBoard:(id)sender;
- .m
- - (IBAction)dismissKeyBoard:(id)sender {
- [testText resignFirstResponder];
- }
2).第二種方法:在背景圖片上添加Tap事件,相應(yīng)單擊處理。這種方法,很好代替了button方式,但是如果UI上沒有背景圖片,這種方法又回到到第一種山寨的方法行列中。
// 添加帶有處理時(shí)間的背景圖片
- UIImageView *backView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
- backView.image = [UIImage imageNamed:@"small3.png"];
- backView.userInteractionEnabled = YES;
- UITapGestureRecognizer *singleTouch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard:)];
- [backView addGestureRecognizer:singleTouch];
- backView.tag = 110;
- [self.view addSubview:backView];
- -(void)dismissKeyboard:(id)sender{
- [text resignFirstResponder];
- }
#p#
3).在xib文件中,修改xib文件的objects屬性,默認(rèn)是view屬性,我們可以修改為UIControl屬性,從而是xib文件相應(yīng)touch down事件。這種方法,缺點(diǎn)就是沒有xib就悲劇了。
- .h
- - (IBAction)dimissKeyboard:(id)sender;
- .m
- - (IBAction)dimissKeyboard:(id)sender {
- [text resignFirstResponder];
- }
23、Gif圖片的解析
- //加載gif
- 02
- 03 NSString *filePath = [[NSBundle mainBundle]pathForResource:@"bai3" ofType:@"gif"];
- 04
- 05 NSData *data = [NSData dataWithContentsOfFile:filePath];
- 06
- 07 CGImageSourceRef gif = CGImageSourceCreateWithData((CFDataRef)data, nil);
- 08
- 09 //獲取gif的各種屬性
- 10
- 11 CFDictionaryRef gifprops =(CGImageSourceCopyPropertiesAtIndex(gif,0,NULL));
- 12
- 13 NSLog(@"_______%@",gifprops);
- 14
- 15
- 16 NSInteger count =CGImageSourceGetCount(gif);
- 17
- 18 NSLog(@"________%d",count);
- 19
- 20
- 21 CFDictionaryRef gifDic = CFDictionaryGetValue(gifprops, kCGImagePropertyGIFDictionary);
- 22
- 23 CFDictionaryRef delay = CFDictionaryGetValue(gifDic, kCGImagePropertyGIFDelayTime);
- 24
- 25 NSLog(@"_______%@",delay);
- 26
- 27
- 28 //[gifDic objectForKey:(NSString *)kCGImagePropertyGIFDelayTime];
- 29
- 30 // NSNumber * w = CFDictionaryGetValue(gifprops, @"PixelWidth");
- 31
- 32 // NSNumber * h =CFDictionaryGetValue(gifprops, @"PixelHeight");
- 33
- 34 // float totalDuration = delay.doubleValue * count;
- 35
- 36 // float pixelWidth = w.intValue;
- 37
- 38 // float pixelHeight = h.intValue;
- 39
- 40 //將gif解析成UIImage類型對(duì)象,并加進(jìn)images數(shù)組中
- 41
- 42
- 43 NSMutableArray *images = [NSMutableArray arrayWithCapacity:count];
- 44
- 45 for(int index=0;index<count;index++)
- 46
- 47 {
- 48
- 49 CGImageRef ref = CGImageSourceCreateImageAtIndex(gif, index, nil);
- 50
- 51 UIImage *img = [UIImage imageWithCGImage:ref];
- 52
- 53 [images addObject:img];
- 54
- 55 CFRelease(ref);
- 56
- 57 }
- 58
- 59 CFRelease(gifprops);
- 60
- 61 CFRelease(gif);
Gif的合成
- - (void)exportAnimatedGif:(CGImageSourceRef )gif :(NSMutableArray *)images
- 02
- 03 {
- 04
- 05 NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"animated.gif"];
- 06
- 07 CGImageDestinationRef destination = CGImageDestinationCreateWithURL(( CFURLRef)[NSURL fileURLWithPath:path],
- 08
- 09 kUTTypeGIF,
- 10
- 11 images.count,
- 12
- 13 NULL);
- 14
- 15 UIImage *image;
- 16
- 17 for (int i = 0; i<images.count; i++)
- 18
- 19 {
- 20
- 21 image = images[i];
- 22
- 23 CFDictionaryRef gifprops =(CGImageSourceCopyPropertiesAtIndex(gif,i,NULL));
- 24
- 25 CFDictionaryRef gifDic = CFDictionaryGetValue(gifprops, kCGImagePropertyGIFDictionary);
- 26
- 27 NSNumber *delay = CFDictionaryGetValue(gifDic, kCGImagePropertyGIFDelayTime);
- 28
- 29 NSDictionary *gifDelay = [NSDictionary dictionaryWithObject:[NSDictionary dictionaryWithObject:delay forKey:(NSString *)kCGImagePropertyGIFDelayTime]
- 30
- 31 forKey:(NSString *)kCGImagePropertyGIFDictionary];
- 32
- 33
- 34
- 35 CGImageDestinationAddImage(destination,image.CGImage, (CFDictionaryRef)gifDelay);
- 36
- 37 CGImageDestinationSetProperties(destination, ( CFDictionaryRef)gifprops);
- 38
- 39 }
- 40
- 41
- 42
- 43 // CGImageDestinationSetProperties(destination, ( CFDictionaryRef)gifprops);
- 44
- 45 CGImageDestinationFinalize(destination);
- 46
- 47 CFRelease(destination);
- 48
- 49 NSLog(@"animated GIF file created at %@", path);
- 50
- 51
- 52 }
24.將一個(gè)UIView對(duì)象的內(nèi)容保存為UIImage
- + (UIImage*)imageFromView:(UIView*)view{
- 02
- 03 UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, view.layer.contentsScale);
- 04
- 05 [view.layer renderInContext:UIGraphicsGetCurrentContext()];
- 06
- 07 UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
- 08
- 09 UIGraphicsEndImageContext();
- 10
- 11 return image;
- 12
- 13 }
注意:生成的圖片的scale和view的scale一致,這樣才可以保證圖片的效果和view顯示的完全一致,使用renderInContext方法可以讓subviews的內(nèi)容也顯示的圖片里。