iOS开发经验总结

// 1.设置UILabel行间距

UILabel* Lab =[[UILabel alloc]init];

NSMutableAttributedString* attributeStr = [[NSMutableAttributedString alloc]initWithString:Lab.text];

NSMutableParagraphStyle* parStyle = [[NSMutableParagraphStyle alloc]init];

[parStyle setLineSpacing:20];

[attributeStr addAttribute:NSParagraphStyleAttributeName value:parStyle range:NSMakeRange(0, Lab.text.length)];

Lab.attributedText = attributeStr;


//2UILabel显示不同颜色字体

UILabel* Lab =[[UILabel alloc]init];

NSMutableAttributedString* attributeStr = [[NSMutableAttributedString alloc]initWithString:Lab.text];

[attributeStr addAttribute:NSForegroundColorAttributeName value:[UIColor yellowColor] range:NSMakeRange(0, 5)];

[attributeStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(5, 8)];

[attributeStr addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(8, Lab.text.length)];

Lab.attributedText = attributeStr;


//3.防止离屏渲染为UIImage添加圆角

- (UIImage*)circleImage{

UIGraphicsBeginImageContextWithOptions(self.size, NO, 1);//NO代表透明

CGContextRef ctx = UIGraphicsGetCurrentContext();//获得上下文

CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);//添加一个圆

CGContextAddEllipseInRect(ctx, rect);//方形变圆形

CGContextClip(ctx);//裁剪

[self drawInRect:rect];//将图片画上去

UIImage* iamge = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return iamge;

}


//判断一个字符串是否为数字

NSCharacterSet* notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];

NSString* str = @"123";

if ([str rangeOfCharacterFromSet:notDigits].location ==NSNotFound) {

//是数字

}else{

//不是数字

}


//将一个view保存为pdf格式

- (void)createPDFFromUIView:(UIView *)aView saveToDocumentsWithFileName:(NSString *)fileName{

NSMutableData* pdfData = [NSMutableData data];

UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);

UIGraphicsBeginPDFPage();

CGContextRef pdfContext = UIGraphicsGetCurrentContext();

[aView.layer renderInContext:pdfContext];

UIGraphicsEndPDFContext();

NSString* path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];

NSString* pdfPath = [path stringByAppendingPathComponent:fileName];

[pdfData writeToFile:pdfPath atomically:YES];

}


//获取当前导航控制器下前一个控制器

NSInteger mgINdex= [self.navigationController.viewControllers indexOfObject:self];

if (mgINdex != 0 && mgINdex !=NSNotFound) {

[self.navigationController.viewControllers objectAtIndex:mgINdex-1];//前一个控制器

}else{

//前一个控制器为nil

}

//在UIImage上绘制文字并生成新的image

- (UIImage*)Image{

UIFont* font = [UIFont boldSystemFontOfSize:12];

UIGraphicsBeginImageContext(self.size);//self---image

[self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];

CGPoint point;

//    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);

CGRect rect = CGRectMake(point.x, point.y, self.size.width, self.size.height);

[[UIColor yellowColor]set];

NSString* str = @"123";

[str drawInRect:CGRectIntegral(rect) withFont:font];

UIImage* newImage =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return newImage;

}

//判断某一行的cell是否已经显示

CGRect cellRect = [tableView rectForRowAtIndexPath:indexpath];

BOOL comVisible = CGRectContainsRect(tableView.bounds,cellRect);


//让导航控制器pop会指定的控制器

NSArray* allVC = self.navigationController.viewControllers;

for (UIViewController* aVC in allVC) {

if ([aVC isKindOfClass:[ViewController class]]) {//ViewController-指定的控制器

[self.navigationController popToViewController:aVC animated:YES];

}

}


//设置UIImage的透明度

/*方法一*/

UIImageView* iamgev = [[UIImageView alloc]init];

iamgev.alpha = 0.5;

/*方法2--添加UIImage的分类*/

- (UIImage *)imageByApplyingAlpha:(CGFloat)alpha{

UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0f);//NO代表透明

CGContextRef ctx = UIGraphicsGetCurrentContext();//获得上下文

CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);

CGContextScaleCTM(ctx, 1, -1);

CGContextTranslateCTM(ctx, 0, -rect.size.height);

CGContextSetBlendMode(ctx, kCGBlendModeMultiply);

CGContextSetAlpha(ctx, alpha);

CGContextDrawImage(ctx, rect, self.CGImage);

UIImage* newiamge = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return newiamge;

}

UIWebView添加单击手势不响应---

因为UIWebView本身有一个单击手势,所以添加会造成手势冲突,从而不响应,在手势代理UIGestureRecognizerDelegate中实现下面的方法即可- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {    return YES; }


地图上两个点之间的实际距离// 

需要导入#importCLLocation *locA = [[CLLocation alloc] initWithLatitude:34 longitude:113];    CLLocation *locB = [[CLLocation alloc] initWithLatitude:31.05 longitude:121.76];// CLLocationDistance求出的单位为米    CLLocationDistance distance = [locA distanceFromLocation:locB];

在应用中打开设置的某个界面

// 打开设置->通用[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General"]];// 以下是设置其他界面prefs:root=General&path=Aboutprefs:root=General&path=ACCESSIBILITYprefs:root=AIRPLANE_MODEprefs:root=General&path=AUTOLOCKprefs:root=General&path=USAGE/CELLULAR_USAGEprefs:root=Brightnessprefs:root=Bluetoothprefs:root=General&path=DATE_AND_TIMEprefs:root=FACETIMEprefs:root=Generalprefs:root=General&path=Keyboardprefs:root=CASTLEprefs:root=CASTLE&path=STORAGE_AND_BACKUPprefs:root=General&path=INTERNATIONALprefs:root=LOCATION_SERVICESprefs:root=ACCOUNT_SETTINGSprefs:root=MUSICprefs:root=MUSIC&path=EQprefs:root=MUSIC&path=VolumeLimitprefs:root=General&path=Networkprefs:root=NIKE_PLUS_IPODprefs:root=NOTESprefs:root=NOTIFICATIONS_IDprefs:root=Phoneprefs:root=Photosprefs:root=General&path=ManagedConfigurationListprefs:root=General&path=Resetprefs:root=Sounds&path=Ringtoneprefs:root=Safariprefs:root=General&path=Assistantprefs:root=Soundsprefs:root=General&path=SOFTWARE_UPDATE_LINKprefs:root=STOREprefs:root=TWITTERprefs:root=FACEBOOKprefs:root=General&path=USAGE prefs:root=VIDEOprefs:root=General&path=Network/VPNprefs:root=Wallpaperprefs:root=WIFIprefs:root=INTERNET_TETHERINGprefs:root=Phone&path=Blockedprefs:root=DO_NOT_DISTURB


在UITextView中显示html文本

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 30, 100, 199)];    textView.backgroundColor = [UIColor redColor];    [self.view addSubview:textView];    NSString *htmlString = @"

Header

Subheader

Sometext

![](http://blogs.babble.com/famecrawler/files/2010/11/mickey_mouse-1097.jpg)";    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData: [htmlString dataUsingEncoding:NSUnicodeStringEncoding] options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes: nil error: nil];    textView.attributedText = attributedString;


监听scrollView是否滚动到了顶部/底部

-(void)scrollViewDidScroll: (UIScrollView*)scrollView{    float scrollViewHeight = scrollView.frame.size.height;    float scrollContentSizeHeight = scrollView.contentSize.height;    float scrollOffset = scrollView.contentOffset.y;    if (scrollOffset == 0)    {        // 滚动到了顶部    }    else if (scrollOffset + scrollViewHeight == scrollContentSizeHeight)    {        // 滚动到了底部    }}

如何把一个CGPoint存入数组里

第一种方法:

CGPointitemSprite1position =CGPointMake(100,200);

NSMutableArray* array  = [[NSMutableArrayalloc] initWithObjects:NSStringFromCGPoint(itemSprite1position),nil];//    从数组中取值的过程是这样的:CGPointpoint =CGPointFromString([array objectAtIndex:0]);NSLog(@"point is %@.",NSStringFromCGPoint(point));

第二种方法:

CGPointitemSprite1position =CGPointMake(100,200);

NSValue*originValue = [NSValuevalueWithCGPoint:itemSprite1position];

NSMutableArray* array  = [[NSMutableArrayalloc] initWithObjects:originValue,nil];//    从数组中取值的过程是这样的:NSValue*currentValue = [array objectAtIndex:0];CGPointpoint = [currentValueCGPointValue];NSLog(@"point is %@.",NSStringFromCGPoint(point));

修改textField的placeholder的字体颜色、大小

self.textField.placeholder = @"username is in here!";

[self.textFieldsetValue:[UIColor redColor]forKeyPath:@"_placeholderLabel.textColor"];[self.textFieldsetValue:[UIFont boldSystemFontOfSize:16]forKeyPath:@"_placeholderLabel.font"];

在ios7上使用size classes后上面下面黑色

使用了size classes后,在ios7的模拟器上出现了上面和下面部分的黑色

可以在General->App Icons and Launch Images->Launch Images Source中设置Images.xcassets来解决。



iOS 开发,工程中混合使用 ARC 和非ARC

Xcode 项目中我们可以使用 ARC 和非 ARC 的混合模式。

如果你的项目使用的非 ARC 模式,则为 ARC 模式的代码文件加入 -fobjc-arc 标签。

如果你的项目使用的是 ARC 模式,则为非 ARC 模式的代码文件加入 -fno-objc-arc 标签。

添加标签的方法:

打开:你的target -> Build Phases -> Compile Sources.

双击对应的 *.m 文件

在弹出窗口中输入上面提到的标签 -fobjc-arc / -fno-objc-arc

点击 done 保存

Xcode iOS加载图片只能用PNG

虽然在Xcode可以看到jpg的图片,但是在加载的时候会失败。

错误为 Could not load the "ReversalImage1" image referenced from a nib in the bun

必须使用PNG的图片。

如果需要使用JPG 需要添加后缀

[UIImage imageNamed:@"myImage.jpg"];

多用GCD,少用performSelector系列方法

多用GCD,少用performSelector系列方法:理由1.performSelector系列方法在内存管理方面容易有缺憾,因为它无法确定将要执行的选择子具体是什么,因而ARC编译器也就无法插入适当的内存管理方法。2.performSelector系列方法所能处理的选择子太过局限了,选择子的返回值类型以及发送给方法的参数个数都受到限制。3.如果想把任务放在另一个线程上执行,最好不要使用performSelector系列方法,而是把任务封装到块里,然后调用打中枢派发机制的相关方法去实现。


对象被释放之前,会调用dealloc方法,其持有的实例变量也会被释放。


self在释放之前,会先释放其持有的关联属性


weak: 持有者不会对目标进行retain, 当目标销毁时, 持有者的实例变量会被置空

unsafe_unretained: 持有者不会对目标进行retain, 当目标释放后, 持有者的实例变量还会依然指向之前的内存空间(野指针)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352