美文网首页
常用iOS 写法

常用iOS 写法

作者: MMOTE | 来源:发表于2017-08-30 16:16 被阅读0次

    转自:http://www.code4app.com/blog-866962-1317.html
    1、设置UILabel行间距
    NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:label.text]; NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; [style setLineSpacing:20]; [attrString addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, label.text.length)]; label.attributedText = attrString;
    // 或者使用xib,看下gif图

    1499657090104458.gif
    Untitled.gif
    2、当使用-performSelector:withObject:withObject:afterDelay:方法时,需要传入多参数问题
    // 方法一、// 把参数放进一个数组/字典,直接把数组/字典当成一个参数传过去,具体方法实现的地方再解析这个数组/字典NSArray * array = [NSArray arrayWithObjects: @"first", @"second", nil];[self performSelector:@selector(fooFirstInput:) withObject: array afterDelay:15.0];// 方法二、// 使用NSInvocationSEL aSelector = NSSelectorFromString(@"doSoming:argument2:"); NSInteger argument1 = 10; NSString argument2 = @"argument2"; if([self respondsToSelector:aSelector]) { NSInvocation inv = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:aSelector]]; [inv setSelector:aSelector]; [inv setTarget:self]; [inv setArgument:&(argument1) atIndex:2]; [inv setArgument:&(argument2) atIndex:3]; [inv performSelector:@selector(invoke) withObject:nil afterDelay:15.0]; }
    3、UILabel显示不同颜色字体
    NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:label.text];[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];label.attributedText = string;
    4、比较两个CGRect/CGSize/CGPoint是否相等
    if (CGRectEqualToRect(rect1, rect2)) { // 两个区域相等 // do some } if (CGPointEqualToPoint(point1, point2)) { // 两个点相等 // do some } if (CGSizeEqualToSize(size1, size2)) { // 两个size相等 // do some }
    5、比较两个NSDate相差多少小时
    NSDate
    date1 = someDate; NSDate
    date2 = someOtherDate; NSTimeInterval distanceBetweenDates = [date1 timeIntervalSinceDate:date2]; double secondsInAnHour = 3600;// 除以3600是把秒化成小时,除以60得到结果为相差的分钟数 NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour;
    6、每个cell之间增加间距
    // 方法一,每个分区只显示一行cell,分区头当作你想要的间距(注意,从数据源数组中取值的时候需要用indexPath.section而不是indexPath.row)- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return yourArry.count;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return 1;}-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return cellSpacingHeight;}// 方法二,在cell的contentView上加个稍微低一点的view,cell上原本的内容放在你的view上,而不是contentView上,这样能伪造出一个间距来。// 方法三,自定义cell,重写setFrame:方法- (void)setFrame:(CGRect)frame{ frame.size.height -= 20; [super setFrame:frame];}
    7、播放一张张连续的图片
    // 加入现在有三张图片分别为animate_1、animate_2、animate_3// 方法一 imageView.animationImages = @[[UIImage imageNamed:@"animate_1"], [UIImage imageNamed:@"animate_2"], [UIImage imageNamed:@"animate_3"]];imageView.animationDuration = 1.0;// 方法二 imageView.image = [UIImage animatedImageNamed:@"animate_" duration:1.0];// 方法二解释下,这个方法会加载animate_为前缀的,后边0-1024,也就是animate_0、animate_1一直到animate_1024
    8、加载gif图片
    推荐使用这个框架 FLAnimatedImage
    9、防止离屏渲染为image添加圆角
    // image分类- (UIImage *)circleImage{// NO代表透明UIGraphicsBeginImageContextWithOptions(self.size, NO, 1);// 获得上下文CGContextRef ctx = UIGraphicsGetCurrentContext();// 添加一个圆CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);// 方形变圆形CGContextAddEllipseInRect(ctx, rect);// 裁剪CGContextClip(ctx);// 将图片画上去[self drawInRect:rect];UIImage *image = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return image;}
    10、查看系统所有字体
    // 打印字体for (id familyName in [UIFont familyNames]) { NSLog(@"%@", familyName); for (id fontName in [UIFont fontNamesForFamilyName:familyName]) NSLog(@" %@", fontName);}// 也可以进入这个网址查看 http://iosfonts.com/
    11、获取随机数
    NSInteger i = arc4random();
    12、获取随机数小数(0-1之间)

    define ARC4RANDOM_MAX 0x100000000double val = ((double)arc4random() / ARC4RANDOM_MAX);

    13、AVPlayer视频播放完成的通知监听
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoPlayEnd) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
    14、判断两个rect是否有交叉
    if (CGRectIntersectsRect(rect1, rect2)) {}
    15、判断一个字符串是否为数字
    NSCharacterSet *notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; if ([str rangeOfCharacterFromSet:notDigits].location == NSNotFound) { // 是数字 } else { // 不是数字 }
    16、将一个view保存为pdf格式

    • (void)createPDFfromUIView:(UIView)aView saveToDocumentsWithFileName:(NSString)aFilename{ NSMutableData pdfData = [NSMutableData data]; UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil); UIGraphicsBeginPDFPage(); CGContextRef pdfContext = UIGraphicsGetCurrentContext(); [aView.layer renderInContext:pdfContext]; UIGraphicsEndPDFContext(); NSArray documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); NSString* documentDirectory = [documentDirectories objectAtIndex:0]; NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename]; [pdfData writeToFile:documentDirectoryFilename atomically:YES]; NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);}
      17、让一个view在父视图中心
      child.center = [parent convertPoint:parent.center fromView:parent.superview];
      18、获取当前导航控制器下前一个控制器
    • (UIViewController *)backViewController{ NSInteger myIndex = [self.navigationController.viewControllers indexOfObject:self]; if ( myIndex != 0 && myIndex != NSNotFound ) { return [self.navigationController.viewControllers objectAtIndex:myIndex-1]; } else { return nil; }}
      19、保存UIImage到本地
      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Image.png"];[UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];
      20、键盘上方增加工具栏
      UIToolbar *keyboardDoneButtonView = [[UIToolbar alloc] init];[keyboardDoneButtonView sizeToFit];UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneClicked:)];[keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]];txtField.inputAccessoryView = keyboardDoneButtonView;
      21、copy一个view
      因为UIView没有实现copy协议,因此找不到copyWithZone方法,使用copy的时候导致崩溃
      但是我们可以通过归档再解档实现copy,这相当于对视图进行了一次深拷贝,代码如下
      id copyOfView = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]];
      22、在image上绘制文字并生成新的image
      UIFont *font = [UIFont boldSystemFontOfSize:12]; UIGraphicsBeginImageContext(image.size); [image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)]; CGRect rect = CGRectMake(point.x, point.y, image.size.width, image.size.height); [[UIColor whiteColor] set]; [text drawInRect:CGRectIntegral(rect) withFont:font]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
      23、判断一个view是否为另一个view的子视图
      // 如果myView是self.view本身,也会返回yesBOOL isSubView = [myView isDescendantOfView:self.view];
      24、判断一个字符串是否包含另一个字符串
      // 方法一、这种方法只适用于iOS8之后,如果是配iOS8之前用方法二if ([str containsString:otherStr]) NSLog(@"包含");// 方法二NSRange range = [str rangeOfString:otherStr];if (range.location != NSNotFound) NSLog(@"包含");
      25、UICollectionView自动滚动到某行
      // 重写viewDidLayoutSubviews方法-(void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; [self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];}
      26、修改系统UIAlertController
      // 但是据说这种方法会被App Store拒绝(慎用!)UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleActionSheet]; NSMutableAttributedString *hogan = [[NSMutableAttributedString alloc] initWithString:@"我是一个大文本"]; [hogan addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:30] range:NSMakeRange(4, 1)]; [hogan addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(4, 1)]; [alertVC setValue:hogan forKey:@"attributedTitle"]; UIAlertAction *button = [UIAlertAction actionWithTitle:@"Label text" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){ }]; UIImage *accessoryImage = [UIImage imageNamed:@"1"]; [button setValue:accessoryImage forKey:@"image"]; [alertVC addAction:button]; [self presentViewController:alertVC animated:YES completion:nil];
      27、判断某一行的cell是否已经显示
      CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];BOOL completelyVisible = CGRectContainsRect(tableView.bounds, cellRect);
      28、让导航控制器pop回指定的控制器
      NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];for (UIViewController *aViewController in allViewControllers) { if ([aViewController isKindOfClass:[RequiredViewController class]]) { [self.navigationController popToViewController:aViewController animated:NO]; }}
      29、动画修改label上的文字
      // 方法一CATransition *animation = [CATransition animation]; animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; animation.type = kCATransitionFade; animation.duration = 0.75; [self.label.layer addAnimation:animation forKey:@"kCATransitionFade"]; self.label.text = @"New";// 方法二[UIView transitionWithView:self.label duration:0.25f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ self.label.text = @"Well done!"; } completion:nil];// 方法三[UIView animateWithDuration:1.0 animations:^{ self.label.alpha = 0.0f; self.label.text = @"newText"; self.label.alpha = 1.0f; }];
      30、判断字典中是否包含某个key值
      if ([dic objectForKey:@"yourKey"]) { NSLog(@"有这个值");} else { NSLog(@"没有这个值");}
      31、获取屏幕方向
      UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;if(orientation == 0) //Default orientation //默认else if(orientation == UIInterfaceOrientationPortrait) //竖屏else if(orientation == UIInterfaceOrientationLandscapeLeft) // 左横屏else if(orientation == UIInterfaceOrientationLandscapeRight) //右横屏
      32、设置UIImage的透明度
      // 方法一、添加UIImage分类- (UIImage *)imageByApplyingAlpha:(CGFloat) alpha { UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0f); CGContextRef ctx = UIGraphicsGetCurrentContext(); CGRect area = CGRectMake(0, 0, self.size.width, self.size.height); CGContextScaleCTM(ctx, 1, -1); CGContextTranslateCTM(ctx, 0, -area.size.height); CGContextSetBlendMode(ctx, kCGBlendModeMultiply); CGContextSetAlpha(ctx, alpha); CGContextDrawImage(ctx, area, self.CGImage); UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage;}// 方法二、如果没有奇葩需求,干脆用UIImageView设置透明度UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithName:@"yourImage"]];imageView.alpha = 0.5;
      33、Attempt to mutate immutable object with insertString:atIndex:
      这个错是因为你拿字符串调用insertString:atIndex:方法的时候,调用对象不是NSMutableString,应该先转成这个类型再调用
      34、UIWebView添加单击手势不响应
      UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(webViewClick)]; tap.delegate = self; [_webView addGestureRecognizer:tap];// 因为webView本身有一个单击手势,所以再添加会造成手势冲突,从而不响应。需要绑定手势代理,并实现下边的代理方法- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer )otherGestureRecognizer{ return YES;}
      35、获取手机RAM容量
      // 需要导入#importmach_port_t host_port; mach_msg_type_number_t host_size; vm_size_t pagesize; host_port = mach_host_self(); host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); host_page_size(host_port, &pagesize); vm_statistics_data_t vm_stat; if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) { NSLog(@"Failed to fetch vm statistics"); } /
      Stats in bytes */ natural_t mem_used = (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count) * pagesize; natural_t mem_free = vm_stat.free_count * pagesize; natural_t mem_total = mem_used + mem_free; NSLog(@"已用: %u 可用: %u 总共: %u", mem_used, mem_free, mem_total);
      36、地图上两个点之间的实际距离
      // 需要导入#importCLLocation *locA = [[CLLocation alloc] initWithLatitude:34 longitude:113]; CLLocation *locB = [[CLLocation alloc] initWithLatitude:31.05 longitude:121.76];// CLLocationDistance求出的单位为米 CLLocationDistance distance = [locA distanceFromLocation:locB];
      37、在应用中打开设置的某个界面
      // 打开设置->通用[[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
      38、在UITextView中显示html文本
      UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 30, 100, 199)]; textView.backgroundColor = [UIColor redColor]; [self.view addSubview:textView]; NSString *htmlString = @" 1499658702959959.png
      xib设置圆角边框.png
      但是增加layer.borderColor的keyPath设置边框颜色并不能起作用,后来查了资料,这里应该用layer.borderUIColor,但是这里设置的颜色不起作用,无论设置什么颜色显示出来的都是黑色的。后来又去查了下,有种解决方案是给CALayer添加一个分类,提供一个 - (void)setBorderUIColor:(UIColor *)color;方法就可以解决了,实现如下:
      1499658718937739.png
      xib设置边框颜色.png

    import "CALayer+BorderColor.h"@implementation CALayer (BorderColor)- (void)setBorderUIColor:(UIColor *)color{ self.borderColor = color.CGColor;}

    76、根据经纬度获取城市等信息
    // 创建经纬度 CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude]; //创建一个译码器 CLGeocoder *cLGeocoder = [[CLGeocoder alloc] init]; [cLGeocoder reverseGeocodeLocation:userLocation completionHandler:^(NSArray *placemarks, NSError error) { CLPlacemark place = [placemarks objectAtIndex:0]; // 位置名   NSLog(@"name,%@",place.name);   // 街道   NSLog(@"thoroughfare,%@",place.thoroughfare);   // 子街道   NSLog(@"subThoroughfare,%@",place.subThoroughfare);   // 市   NSLog(@"locality,%@",place.locality);   // 区   NSLog(@"subLocality,%@",place.subLocality);   // 国家   NSLog(@"country,%@",place.country); } }];/ CLPlacemark中属性含义name 地名thoroughfare 街道subThoroughfare 街道相关信息,例如门牌等locality 城市subLocality 城市相关信息,例如标志性建筑administrativeArea 直辖市subAdministrativeArea 其他行政区域信息(自治区等)postalCode 邮编ISOcountryCode 国家编码country 国家inlandWater 水源,湖泊ocean 海洋areasOfInterest 关联的或利益相关的地标/
    77、如何防止添加多个NSNotification观察者?
    // 解决方案就是添加观察者之前先移除下这个观察者[[NSNotificationCenter defaultCenter] removeObserver:observer name:name object:object]; [[NSNotificationCenter defaultCenter] addObserver:observer selector:selector name:name object:object];
    78、将一个xib添加到另外一个xib上
    // 假设你的自定义view名字为CustomView,你需要在CustomView.m中重写 - (instancetype)initWithCoder:(NSCoder *)aDecoder 方法,代码如下:- (instancetype)initWithCoder:(NSCoder *)aDecoder { if ((self = [super initWithCoder:aDecoder])) { [self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0]]; } return self;}

    1499658806305115.png
    将一个xib添加到另外一个xib上.png
    79、处理字符串,使其首字母大写
    NSString *str = @"abcdefghijklmn"; NSString *resultStr; if (str && str.length > 0) { resultStr = [str stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[str substringToIndex:1] capitalizedString]]; } NSLog(@"%@", resultStr);
    80、判断一个UIAlertView/UIAlertController是否显示
    // UIAlertView自带属性if (alert.visible){ NSLog(@"显示了");} else { NSLog(@"未显示");}// UIAlertController没有visible属性,需要自己判断,添加一个全局变量 BOOL visibleUIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"message" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *alertAction = [UIAlertAction actionWithTitle:@"ActionTitle" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { self.visible = NO; }]; UIAlertAction *calcelAction = [UIAlertAction actionWithTitle:@"calcelTitle" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { self.visible = NO; }]; [alertController addAction:alertAction]; [alertController addAction:calcelAction]; [self presentViewController:alertController animated:YES completion:^{ self.visible = YES; }];
    81、获取字符串中的数字
    • (NSString )getNumberFromStr:(NSString )str{ NSCharacterSet nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; return [[str componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];}6 NSLog(@"%@", [self getNumberFromStr:@"a0b0c1d2e3f4fda8fa8fad9fsad23"]); // 00123488923
      82、为UIView的某个方向添加边框
      // 添加UIView分类// UIView+WZB.h#import/
      边框方向 - WZBBorderDirectionTop: 顶部 - WZBBorderDirectionLeft: 左边 - WZBBorderDirectionBottom: 底部 - WZBBorderDirectionRight: 右边 /typedef NS_ENUM(NSInteger, WZBBorderDirectionType) { WZBBorderDirectionTop = 0, WZBBorderDirectionLeft, WZBBorderDirectionBottom, WZBBorderDirectionRight};@interface UIView (WZB)/
      为UIView的某个方向添加边框 @param direction 边框方向 @param color 边框颜色 @param width 边框宽度 */- (void)wzb_addBorder:(WZBBorderDirectionType)direction color:(UIColor *)color width:(CGFloat)width;@end// UIView+WZB.m#import "UIView+WZB.h"@implementation UIView (WZB)- (void)wzb_addBorder:(WZBBorderDirectionType)direction color:(UIColor *)color width:(CGFloat)width{ CALayer *border = [CALayer layer]; border.backgroundColor = color.CGColor; switch (direction) { case WZBBorderDirectionTop: { border.frame = CGRectMake(0.0f, 0.0f, self.bounds.size.width, width); } break; case WZBBorderDirectionLeft: { border.frame = CGRectMake(0.0f, 0.0f, width, self.bounds.size.height); } break; case WZBBorderDirectionBottom: { border.frame = CGRectMake(0.0f, self.bounds.size.height - width, self.bounds.size.width, width); } break; case WZBBorderDirectionRight: { border.frame = CGRectMake(self.bounds.size.width - width, 0, width, self.bounds.size.height); } break; default: break; } [self.layer addSublayer:border];}
      83、通过属性设置UISwitch、UIProgressView等控件的宽高
      mySwitch.transform = CGAffineTransformMakeScale(5.0f, 5.0f);progressView.transform = CGAffineTransformMakeScale(5.0f, 5.0f);
      84、自动搜索功能,用户连续输入的时候不搜索,用户停止输入的时候自动搜索(我这里设置的是0.5s,可根据需求更改)
      // 输入框文字改变的时候调用-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ // 先取消调用搜索方法 [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(searchNewResult) object:nil]; // 0.5秒后调用搜索方法 [self performSelector:@selector(searchNewResult) withObject:nil afterDelay:0.5];}
      85、修改UISearchBar的占位文字颜色
      // 方法一(推荐使用) UITextField *searchField = [searchBar valueForKey:@"_searchField"]; [searchField setValue:[UIColor blueColor] forKeyPath:@"_placeholderLabel.textColor"]; // 方法二(已过期) [[UILabel appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]]; // 方法三(已过期) NSDictionary *placeholderAttributes = @{NSForegroundColorAttributeName : [UIColor redColor], NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue" size:15],}; NSAttributedString *attributedPlaceholder = [[NSAttributedString alloc] initWithString:searchBar.placeholder attributes:placeholderAttributes]; [[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setAttributedPlaceholder:attributedPlaceholder];
      86、某个界面多个事件同时响应引起的问题(比如,两个button同时按push到新界面,两个都会响应,可能导致push重叠)
      // UIView有个属性叫做exclusiveTouch,设置为YES后,其响应事件会和其他view互斥(有其他view事件响应的时候点击它不起作用)view.exclusiveTouch = YES;// 一个一个设置太麻烦了,可以全局设置[[UIView appearance] setExclusiveTouch:YES];// 或者只设置button[[UIButton appearance] setExclusiveTouch:YES];
      87、修改tabBar的frame
      // 子类化UITabBarViewController,我这里以修改tabBar高度为例,重写viewWillLayoutSubviews方法#import "WZBTabBarViewController.h"@interface WZBTabBarViewController ()@end@implementation WZBTabBarViewController- (void)viewWillLayoutSubviews { CGRect tabFrame = self.tabBar.frame; tabFrame.size.height = 100; tabFrame.origin.y = self.view.frame.size.height - 100; self.tabBar.frame = tabFrame;}@end
      88、修改键盘背景颜色
      // 设置某个键盘颜色 textField.keyboardAppearance = UIKeyboardAppearanceAlert;// 设置工程中所有键盘颜色[[UITextField appearance] setKeyboardAppearance:UIKeyboardAppearanceAlert];
      89、修改image颜色
      UIImage *image = [UIImage imageNamed:@"test"]; imageView.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextClipToMask(context, rect, image.CGImage); CGContextSetFillColorWithColor(context, [[UIColor redColor] CGColor]); CGContextFillRect(context, rect); UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImage *flippedImage = [UIImage imageWithCGImage:img.CGImage scale:1.0 orientation: UIImageOrientationDownMirrored]; imageView.image = flippedImage;
      90、动画执行removeFromSuperview
      [UIView animateWithDuration:0.2 animations:^{ view.alpha = 0.0f; } completion:^(BOOL finished){ [view removeFromSuperview]; }];
      91、设置UIButton高亮背景颜色
      [UIView animateWithDuration:0.2 animations:^{ view.alpha = 0.0f; } completion:^(BOOL finished){ [view removeFromSuperview]; }];
      92、设置UIButton高亮时的背景颜色
      // 方法一、子类化UIButton,重写setHighlighted:方法,代码如下#import "WZBButton.h"@implementation WZBButton- (void)setHighlighted:(BOOL)highlighted { [super setHighlighted:highlighted]; UIColor *normalColor = [UIColor greenColor]; UIColor *highlightedColor = [UIColor redColor]; self.backgroundColor = highlighted ? highlightedColor : normalColor;}// 方法二、利用setBackgroundImage:forState:方法[button setBackgroundImage:[self imageWithColor:[UIColor blueColor]] forState:UIControlStateHighlighted];- (UIImage *)imageWithColor:(UIColor *)color { CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [color CGColor]); CGContextFillRect(context, rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image;}
      93、关于图片拉伸
      推荐看这个博客,讲的很详细:http://blog.csdn.net/q199109106q/article/details/8615661
      94、利用runtime获取一个类所有属性
    • (NSArray *)allPropertyNames:(Class)aClass{ unsigned count; objc_property_t *properties = class_copyPropertyList(aClass, &count); NSMutableArray *rv = [NSMutableArray array]; unsigned i; for (i = 0; i < count; i++) { objc_property_t property = properties[i]; NSString *name = [NSString stringWithUTF8String:property_getName(property)]; [rv addObject:name]; } free(properties); return rv;}
      95、设置textView的某段文字变成其他颜色
    • (void)setupTextView:(UITextView *)textView text:(NSString *)text color:(UIColor *)color { NSMutableAttributedString *string = [[NSMutableAttributedString alloc]initWithString:textView.text]; [string addAttribute:NSForegroundColorAttributeName value:color range:[textView.text rangeOfString:text]]; [textView setAttributedText:string];}
      96、让push跳转动画像modal跳转动画那样效果(从下往上推上来)
    • (void)push{TestViewController vc = [[TestViewController alloc] init]; vc.view.backgroundColor = [UIColor redColor]; CATransition transition = [CATransition animation]; transition.duration = 0.4f; transition.type = kCATransitionMoveIn; transition.subtype = kCATransitionFromTop; [self.navigationController.view.layer addAnimation:transition forKey:kCATransition]; [self.navigationController pushViewController:vc animated:NO];}- (void)pop{CATransition* transition = [CATransition animation]; transition.duration = 0.4f; transition.type = kCATransitionReveal; transition.subtype = kCATransitionFromBottom; [self.navigationController.view.layer addAnimation:transition forKey:kCATransition]; [self.navigationController popViewControllerAnimated:NO];}
      97、上传图片太大,压缩图片
      -(UIImage *)resizeImage:(UIImage *)image{ float actualHeight = image.size.height; float actualWidth = image.size.width; float maxHeight = 300.0; float maxWidth = 400.0; float imgRatio = actualWidth/actualHeight; float maxRatio = maxWidth/maxHeight; float compressionQuality = 0.5;//50 percent compression if (actualHeight > maxHeight || actualWidth > maxWidth) { if(imgRatio < maxRatio) { //adjust width according to maxHeight imgRatio = maxHeight / actualHeight; actualWidth = imgRatio * actualWidth; actualHeight = maxHeight; } else if(imgRatio > maxRatio) { //adjust height according to maxWidth imgRatio = maxWidth / actualWidth; actualHeight = imgRatio * actualHeight; actualWidth = maxWidth; } else { actualHeight = maxHeight; actualWidth = maxWidth; } } CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight); UIGraphicsBeginImageContext(rect.size); [image drawInRect:rect]; UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); NSData *imageData = UIImageJPEGRepresentation(img, compressionQuality); UIGraphicsEndImageContext(); return [UIImage imageWithData:imageData];}

    相关文章

      网友评论

          本文标题:常用iOS 写法

          本文链接:https://www.haomeiwen.com/subject/bffxjxtx.html