发现慢慢积累了一大堆自己写的各种类的类目了。。今天无私一把。都贴出来
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
时间: 2024-10-12 21:18:18