转自: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图
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;}
将一个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];}
网友评论