您的位置:首页 > 移动开发 > IOS开发

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 常用代码块