1.NSDateFomatter
Objective-C
1
2
3
4
5
6
7
8
|
@interface NSDateFormatter (MyCategory)
+ (id)dateFormatter;
+ (id)dateFormatterWithFormat:(NSString *)dateFormat;
+ (id)defaultDateFormatter;
@end
|
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
@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
Objective-C
1
2
3
4
5
6
7
|
@interface NSDate (MyCategory)
- (NSString *)timeIntervalDescription;//距离当前的时间间隔
- (NSString *)minuteDescription;//精确到分钟的日期
- (NSString *)formattedDateDescription;//格式化日期
@end
|
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
@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
Objective-C
1
2
3
4
5
|
@interface UIColor (MyCategory)
+ (UIColor *)colorWithHexRGB:(NSString *)hexRGBString;
@end
|
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
@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
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@interface UIImage (MyCategory)
//图片拉伸、平铺接口
- (UIImage *)resizableImageWithCompatibleCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode;
//图片以ScaleToFit方式拉伸后的CGSize
- (CGSize)sizeOfScaleToFit:(CGSize)scaledSize;
//将图片转向调整为向上
- (UIImage *)fixOrientation;
//以ScaleToFit方式压缩图片
- (UIImage *)compressedImageWithSize:(CGSize)compressedSize;
@end
|
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
@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
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@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
|
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
@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
|