zoukankan      html  css  js  c++  java
  • iOS经常使用类别

    我们发现,慢慢积累了很多自己写的各种类别的。

    。今天,无私。张贴

    1.NSDateFomatter

    @interface NSDateFormatter (MyCategory)
    
    + (id)dateFormatter;
    + (id)dateFormatterWithFormat:(NSString *)dateFormat;
    
    + (id)defaultDateFormatter;
    
    @end

    @implementation NSDateFormatter (MyCategory)
    
    + (id)dateFormatter
    {
        return [[self alloc] init];
    }
    
    + (id)dateFormatterWithFormat:(NSString *)dateFormat
    {
        NSDateFormatter *dateFormatter = [[self alloc] init];
        dateFormatter.dateFormat = dateFormat;
        return dateFormatter;
    }
    
    + (id)defaultDateFormatter
    {
        return [self dateFormatterWithFormat:@"yyyy-MM-dd HH:mm:ss"];
    }
    
    @end
    

    2.NSDate

    @interface NSDate (MyCategory)
    
    - (NSString *)timeIntervalDescription;//距离当前的时间间隔
    - (NSString *)minuteDescription;//精确到分钟的日期
    - (NSString *)formattedDateDescription;//格式化日期
    
    @end
    

    @implementation NSDate (MyCategory)
    
    
    - (NSString *)timeIntervalDescription
    {    
        NSTimeInterval timeInterval = -[self timeIntervalSinceNow];
    	if (timeInterval < 60) {
            return @"1分钟内";
    	} else if (timeInterval < 3600) {
            return [NSString stringWithFormat:@"%.f分钟前", timeInterval / 60];
    	} else if (timeInterval < 86400) {
            return [NSString stringWithFormat:@"%.f小时前", timeInterval / 3600];
    	} else if (timeInterval < 2592000) {//30天内
            return [NSString stringWithFormat:@"%.f天前", timeInterval / 86400];
        } else if (timeInterval < 31536000) {//30天至1年内
            NSDateFormatter *dateFormatter = [NSDateFormatter dateFormatterWithFormat:@"M月d日"];
            return [dateFormatter stringFromDate:self];
        } else {
            return [NSString stringWithFormat:@"%.f年前", timeInterval / 31536000];
        }
    }
    
    
    - (NSString *)minuteDescription
    {
        NSDateFormatter *dateFormatter = [NSDateFormatter dateFormatterWithFormat:@"yyyy-MM-dd"];
        
    	NSString *theDay = [dateFormatter stringFromDate:self];//日期的年月日
    	NSString *currentDay = [dateFormatter stringFromDate:[NSDate date]];//当前年月日
        if ([theDay isEqualToString:currentDay]) {//当天
    		[dateFormatter setDateFormat:@"ah:mm"];
            return [dateFormatter stringFromDate:self];
    	} else if ([[dateFormatter dateFromString:currentDay] timeIntervalSinceDate:[dateFormatter dateFromString:theDay]] == 86400) {//昨天
            [dateFormatter setDateFormat:@"ah:mm"];
            return [NSString stringWithFormat:@"昨天 %@", [dateFormatter stringFromDate:self]];
        } else if ([[dateFormatter dateFromString:currentDay] timeIntervalSinceDate:[dateFormatter dateFromString:theDay]] < 86400 * 7) {//间隔一周内
            [dateFormatter setDateFormat:@"EEEE ah:mm"];
            return [dateFormatter stringFromDate:self];
        } else {//曾经
    		[dateFormatter setDateFormat:@"yyyy-MM-dd ah:mm"];
            return [dateFormatter stringFromDate:self];
    	}
    }
    
    
    - (NSString *)formattedDateDescription
    {
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        
    	[dateFormatter setDateFormat:@"yyyy-MM-dd"];
    	NSString *theDay = [dateFormatter stringFromDate:self];//日期的年月日
    	NSString *currentDay = [dateFormatter stringFromDate:[NSDate date]];//当前年月日
        
        NSInteger timeInterval = -[self timeIntervalSinceNow];
        if (timeInterval < 60) {
            return @"1分钟内";
    	} else if (timeInterval < 3600) {//1小时内
            return [NSString stringWithFormat:@"%d分钟前", timeInterval / 60];
    	} else if (timeInterval < 21600) {//6小时内
            return [NSString stringWithFormat:@"%d小时前", timeInterval / 3600];
    	} else if ([theDay isEqualToString:currentDay]) {//当天
    		[dateFormatter setDateFormat:@"HH:mm"];
            return [NSString stringWithFormat:@"今天 %@", [dateFormatter stringFromDate:self]];
    	} else if ([[dateFormatter dateFromString:currentDay] timeIntervalSinceDate:[dateFormatter dateFromString:theDay]] == 86400) {//昨天
            [dateFormatter setDateFormat:@"HH:mm"];
            return [NSString stringWithFormat:@"昨天 %@", [dateFormatter stringFromDate:self]];
        } else {//曾经
    		[dateFormatter setDateFormat:@"MM-dd HH:mm"];
            return [dateFormatter stringFromDate:self];
    	}
    }
    
    @end
    

    3.UIColor

    @interface UIColor (MyCategory)
    
    + (UIColor *)colorWithHexRGB:(NSString *)hexRGBString;
    
    @end
    @implementation UIColor (MyCategory)
    
    /*由16进制字符串获取颜色*/
    + (UIColor *)colorWithHexRGB:(NSString *)hexRGBString
    {
        
        if ([hexRGBString hasPrefix:@"#"]) {
            
            hexRGBString = [hexRGBString substringFromIndex:1];
        }
        unsigned int colorCode = 0;
        unsigned char redByte, greenByte, blueByte;
        
        if (hexRGBString) {
            NSScanner *scanner = [NSScanner scannerWithString:hexRGBString];
            [scanner scanHexInt:&colorCode];
        }
        redByte = (unsigned char) (colorCode >> 16);
        greenByte = (unsigned char) (colorCode >> 8);
        blueByte = (unsigned char) (colorCode); // masks off high bits
        
        return [UIColor colorWithRed:(float)redByte/0xff green:(float)greenByte/0xff blue:(float)blueByte/0xff alpha:1.0];
    }
    @end

    4.UIImage

    @interface UIImage (MyCategory)
    //图片拉伸、平铺接口 
    - (UIImage *)resizableImageWithCompatibleCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode;
    //图片以ScaleToFit方式拉伸后的CGSize
    - (CGSize)sizeOfScaleToFit:(CGSize)scaledSize;
    
    //将图片转向调整为向上
    - (UIImage *)fixOrientation;
    
    //以ScaleToFit方式压缩图片
    - (UIImage *)compressedImageWithSize:(CGSize)compressedSize;
    
    @end
    
    @implementation UIImage (MyCategory)
    /*获取当前主题包的指定图片*/
    + (UIImage *)themeImageNamed:(NSString *)name
    {
        NSUInteger themeID = [[ViewManager defaultManager] themeID];
        if (themeID == 0) {//默认主题
            NSString *fileName = [NSString stringWithFormat:@"Lianxi.bundle/Images/%@", name];
            return [self imageNamed:fileName];
        } else {//下载主题
            return nil;
        }
    }
    
    /*图片拉伸、平铺接口。兼容iOS5+*/
    - (UIImage *)resizableImageWithCompatibleCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode
    {
        CGFloat version = [[[UIDevice currentDevice] systemVersion] floatValue];
        if (version >= 6.0) {
            return [self resizableImageWithCapInsets:capInsets resizingMode:resizingMode];
        } else if (version >= 5.0) {
            if (resizingMode == UIImageResizingModeStretch) {
                return [self stretchableImageWithLeftCapWidth:capInsets.left topCapHeight:capInsets.top];
            } else {//UIImageResizingModeTile
                return [self resizableImageWithCapInsets:capInsets];
            }
        } else {
            return [self stretchableImageWithLeftCapWidth:capInsets.left topCapHeight:capInsets.top];
        }
    }
    
    /*图片以ScaleToFit方式拉伸后的CGSize*/
    - (CGSize)sizeOfScaleToFit:(CGSize)scaledSize
    {
        CGFloat scaleFactor = scaledSize.width / scaledSize.height;
        CGFloat imageFactor = self.size.width / self.size.height;
        if (scaleFactor <= imageFactor) {//图片横向填充
            return CGSizeMake(scaledSize.width, scaledSize.width / imageFactor);
        } else {//纵向填充
            return CGSizeMake(scaledSize.height * imageFactor, scaledSize.height);
        }
    }
    
    /*将图片转向调整为向上*/
    - (UIImage *)fixOrientation
    {
        if (self.imageOrientation == UIImageOrientationUp) {
            return self;
        }
        
        UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
        [self drawInRect:CGRectMake(0.0, 0.0, self.size.width, self.size.height)];
        
        UIImage *fixedImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        
        return fixedImage;
        
    }
    /*以ScaleToFit方式压缩图片*/
    - (UIImage *)compressedImageWithSize:(CGSize)compressedSize
    {
        if (CGSizeEqualToSize(self.size, CGSizeZero) || (self.size.width <= compressedSize.width && self.size.height <= compressedSize.height)) {//不用压缩
            return self;
        }
        
        CGSize scaledSize = [self sizeOfScaleToFit:compressedSize];
        
        //压缩大小。调整转向
        UIGraphicsBeginImageContext(scaledSize);
        [self drawInRect:CGRectMake(0.0, 0.0, scaledSize.width, scaledSize.height)];
        UIImage *compressedImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        
        return compressedImage;
    }
    
    @end
    

    5.UIView

    @interface UIView (MyCategory)
    
    - (void)startShakeAnimation;//摇动动画
    - (void)stopShakeAnimation;
    - (void)startRotateAnimation;//360°旋转动画
    - (void)stopRotateAnimation;
    
    ///截图
    - (UIImage *)screenshot;
    
    @property (nonatomic) float top;
    @property (nonatomic) float bottom;
    @property (nonatomic) float left;
    @property (nonatomic) float right;
    
    @end

    @implementation UIView (MyCategory)
    
    /*截图*/
    - (UIImage *)screenshot
    {
        UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 2.0);
        [self.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        
        return image;
    }
    
    
    
    #pragma mark - Animation
    
    - (void)startShakeAnimation
    {
        CGFloat rotation = 0.05;
        
        CABasicAnimation *shake = [CABasicAnimation animationWithKeyPath:@"transform"];
        shake.duration = 0.2;
        shake.autoreverses = YES;
        shake.repeatCount = MAXFLOAT;
        shake.removedOnCompletion = NO;
        shake.fromValue = [NSValue valueWithCATransform3D:CATransform3DRotate(self.layer.transform, -rotation, 0.0, 0.0, 1.0)];
        shake.toValue   = [NSValue valueWithCATransform3D:CATransform3DRotate(self.layer.transform,  rotation, 0.0, 0.0, 1.0)];
        
        [self.layer addAnimation:shake forKey:@"shakeAnimation"];
    }
    
    - (void)stopShakeAnimation
    {
        [self.layer removeAnimationForKey:@"shakeAnimation"];
    }
    
    - (void)startRotateAnimation
    {
        CABasicAnimation *shake = [CABasicAnimation animationWithKeyPath:@"transform"];
        shake.duration = 0.5;
        shake.autoreverses = NO;
        shake.repeatCount = MAXFLOAT;
        shake.removedOnCompletion = NO;
        shake.fromValue = [NSValue valueWithCATransform3D:CATransform3DRotate(self.layer.transform, M_PI, 0.0, 0.0, 1.0)];
        shake.toValue   = [NSValue valueWithCATransform3D:CATransform3DRotate(self.layer.transform,  0.0, 0.0, 0.0, 1.0)];
        
        [self.layer addAnimation:shake forKey:@"rotateAnimation"];
    }
    
    - (void)stopRotateAnimation
    {
        [self.layer removeAnimationForKey:@"rotateAnimation"];
    }
    
    -(float)top
    {
        return self.frame.origin.x;
    }
    -(float)bottom
    {
        return self.top+self.frame.size.height;
    }
    -(float)left
    {
        return self.frame.origin.x;
    }
    -(float)right
    {
        return self.left+self.frame.size.width;
    }
    
    @end
    





    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    MySQL(十五)之数据备份中mysqldump详解
    MySQL(十四)之数据备份与还原
    MySQL(十三)之MySQL事务
    Flink MysqlSink 简单样例
    Flink FileSink 自定义输出路径——StreamingFileSink、BucketingSink 和 StreamingFileSink简单比较
    Flink FileSink 自定义输出路径——BucketingSink
    【翻译】Flink Joining
    Flink 异步IO访问外部数据(mysql篇)
    【翻译】Flink 异步I / O访问外部数据
    Flink 自定义source和sink,获取kafka的key,输出指定key
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4853326.html
Copyright © 2011-2022 走看看