發現慢慢積累了一大堆自己寫的各種類的類目了。。今天無私一把。都貼出來
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
@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
@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
@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
@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