標籤:des blog color os io ar for 2014 art
發現慢慢積累了一大堆自己寫的各種類的類目了。。今天無私一把。都貼出來
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
iOS常用類目