iOS常用代码总结(一)
2016-05-20 16:32
513 查看
1.自定义导航栏返回按钮
- (void)createNavigationLeftBarButtonItem {UIButton *backButton = [UIButtonbuttonWithType:UIButtonTypeCustom];
backButton.frame =CGRectMake(0,0,60,26);
[backButton setImage:[UIImageimageNamed:@"BrowserBack"]forState:UIControlStateNormal];
[backButton setTitle:@"返回"forState:UIControlStateNormal];
[backButton.titleLabelsetFont:[UIFontsystemFontOfSize:14]];
[backButton setTitleEdgeInsets:UIEdgeInsetsMake(0,-14,0,0)];
[backButton addTarget:selfaction:@selector(back)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *buttonItem = [[UIBarButtonItemalloc]initWithCustomView:backButton];
UIBarButtonItem *negativeSpacer = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:
UIBarButtonSystemItemFixedSpacetarget:nil action:nil];
negativeSpacer.width = -13;
self.navigationItem.leftBarButtonItems =@[negativeSpacer,
buttonItem];
}
2.监听键盘的显示隐藏
-(void)keyboardWillHide:(NSNotification *)notify{
CGFloat duration = [notify.userInfo[UIKeyboardAnimationDurationUserInfoKey]doubleValue];
[UIViewanimateWithDuration:durationanimations:^{
self.view.transform =CGAffineTransformIdentity;
}];
}
-(void)keyboardWillShow:(NSNotification *)notify
{
CGFloat duration = [notify.userInfo[UIKeyboardAnimationDurationUserInfoKey]
doubleValue];
[UIViewanimateWithDuration:durationanimations:^{
CGRect keyboardF = [notify.userInfo[UIKeyboardFrameEndUserInfoKey]CGRectValue];
CGFloat keyboardH = keyboardF.size.height;
self.view.transform
= CGAffineTransformMakeTranslation(0,- keyboardH);
}];
}
3.图片模糊效果处理
#import <Accelerate/Accelerate.h>- (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur
{
int boxSize = (int)blur;//模糊度
if (blur>=30) {
boxSize=1;
}else{
boxSize -= (boxSize % 2) +1;
}
CGImageRef img = image.CGImage;
//图像缓存,输入缓存,输出缓存
vImage_Buffer inBuffer, outBuffer;
vImage_Error error;
void *pixelBuffer;//像素缓存
CGDataProviderRef inProvider =CGImageGetDataProvider(img);
CFDataRef inBitmapData =CGDataProviderCopyData(inProvider);
inBuffer.width =CGImageGetWidth(img);
inBuffer.height =CGImageGetHeight(img);
inBuffer.rowBytes =CGImageGetBytesPerRow(img);
inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);
//像数缓存,字节行*图片高
pixelBuffer = malloc(CGImageGetBytesPerRow(img) *CGImageGetHeight(img));
outBuffer.data = pixelBuffer;
outBuffer.width =CGImageGetWidth(img);
outBuffer.height =CGImageGetHeight(img);
outBuffer.rowBytes =CGImageGetBytesPerRow(img);
// 第三个中间的缓存区,抗锯齿的效果
void *pixelBuffer2 =malloc(CGImageGetBytesPerRow(img)
*CGImageGetHeight(img));
vImage_Buffer outBuffer2;
outBuffer2.data = pixelBuffer2;
outBuffer2.width =CGImageGetWidth(img);
outBuffer2.height =CGImageGetHeight(img);
outBuffer2.rowBytes =CGImageGetBytesPerRow(img);
error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer2,NULL,0,0,
boxSize, boxSize,NULL,
kvImageEdgeExtend);
error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer,NULL,0,0,
boxSize, boxSize,NULL,
kvImageEdgeExtend);
CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();
CGContextRef ctx =CGBitmapContextCreate(
outBuffer.data,
outBuffer.width,
outBuffer.height,
8,
outBuffer.rowBytes,
colorSpace,
CGImageGetBitmapInfo(image.CGImage));
CGImageRef imageRef =CGBitmapContextCreateImage(ctx);
UIImage *returnImage = [UIImageimageWithCGImage:imageRef];
//清理内存
CGContextRelease(ctx);
CGColorSpaceRelease(colorSpace);
free(pixelBuffer);
free(pixelBuffer2);
CFRelease(inBitmapData);
CGColorSpaceRelease(colorSpace);
CGImageRelease(imageRef);
return returnImage;
}
4.回到主控制器,恢复导航栏的显示
-(void)viewWillAppear:(BOOL)animated {[superviewWillAppear:animated];
[self.navigationControllersetNavigationBarHidden:NO];
[self.navigationControllersetNavigationBarHidden:YES];
[self.navigationControllersetNavigationBarHidden:NO];
}
5.使用Masonry作动画
[self.label mas_updateConstraints:^(MASConstraintMaker*make) {
make.centerX.mas_equalTo(self.view.mas_centerX).mas_equalTo(20);
}];
[UIView animateWithDuration:1.0 animations:^{
[self.viewlayoutIfNeeded];
}];
//旋转动画,直接修改transform属性即可.
[UIView animateWithDuration:1.0 animations:^{
self.label.transform
= CGAffineTransformRotate(self.label.transform,M_PI_4);
}];
6.注册用户通知(推送)
- (void)registerUserNotification {/*
注册通知(推送)
申请App需要接受来自服务商提供推送消息
*/
//判读系统版本是否是“iOS 8.0”以上
if ([[[UIDevicecurrentDevice]systemVersion]floatValue]
>=8.0 ||
[UIApplicationinstancesRespondToSelector:@selector(registerUserNotificationSettings:)])
{
//定义用户通知类型(Remote.远程
- Badge.标记 Alert.提示 Sound.声音)
UIUserNotificationType types = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge
|UIUserNotificationTypeSound;
//定义用户通知设置
UIUserNotificationSettings *settings = [UIUserNotificationSettingssettingsForTypes:typescategories:nil];
//注册用户通知 -根据用户通知设置
[[UIApplicationsharedApplication]registerUserNotificationSettings:settings];
[[UIApplicationsharedApplication]registerForRemoteNotifications];
} else {// iOS8.0以前远程推送设置方式
//定义远程通知类型(Remote.远程
- Badge.标记 Alert.提示 Sound.声音)
UIRemoteNotificationType myTypes =UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeAlert
|UIRemoteNotificationTypeSound;
//注册远程通知 -根据远程通知类型
[[UIApplicationsharedApplication]registerForRemoteNotificationTypes:myTypes];
}
}
7.DEBUG宏应用
#define DEBUG 1#ifdef DEBUG
#define FCLog(...) NSLog(__VA_ARGS__)
#else
#define FCLog(...)
#endif
8.单例的一般写法
+ (SKAccountManager *)defaultAccountManager {staticSKAccountManager *_sharedInstance;
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedInstance = [[SKAccountManageralloc]init];
});
return _sharedInstance;
}
9.当在一个view上添加一个屏蔽罩,但又不影响对下面view的事件响应
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
UIView *hitView = [superhitTest:pointwithEvent:event];
NSLog(@"%@",hitView);
if (hitView ==self) {
returnnil;
}elsereturn hitView;
}
10.UILabel在规定长度范围内,自适应字体,以完全显示文本
[_titleLabelmas_makeConstraints:^(MASConstraintMaker
*make) {
make.left.mas_offset(bItemMargin);
make.centerY.mas_equalTo(0);
make.width.mas_lessThanOrEqualTo(SCREEN_WIDTH
- 13);
}];
_titleLabel.adjustsFontSizeToFitWidth =YES;
_titleLabel.minimumScaleFactor =0.5;
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- iOS推送的那些事