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

。今天,无私。张贴

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经常使用类别的更多相关文章

  1. iOS 中使用类别简化代码开发

    最近需要一个函数,把CLLocation对象转化为NSDictionary,按照我以前的想法,我会写一个工具类,之后添加一个函数,类似这样 - (NSDictionary *)turnLocation ...

  2. ios 中Category类别(扩展类)小结

    类别 类别是一种为现有的类添加新方法的方式.利用Objective-C的动态运行时(runtime)分配机制,可以为现有的类添加新方法,这种为现有的类添加新方法的方式称为类别catagory,他可以为 ...

  3. iOS基础知识之类别

    本类从三个方面介绍iOS中的类别,分别是  什么是类别:类别的语法:类别的作用.具体内容如下: 一.类别: 类的补丁:当不能获取现有类的源码,但需要对现有类的功能进行补充时,这种情况下使用类别. 类别 ...

  4. iOS APP 国际化

    pp Store 中很多流行的应用程序有多种语言版本.虽然这些应用程序可能因为很多因素而变得流行,但是具有多种本地化版本,肯定是其中一个因素.越多的人可以理解并使用您的应用程序,潜在的买家也就越多. ...

  5. category用法

    1.今天在复习之前的category的时候,遇到一个这样子的问题.查来一下,原来苹果的官方文档中有说明,苹果时不提倡我们在类别中重写原文件的内容,如果要重写,就继承他,然后重写,但是在项目中,有很多前 ...

  6. 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?

    [编者按]本篇文章作者是Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客.本篇文章中,作者主要介绍了如何基于Parse特点,打造一款类似Instagram的应 ...

  7. C++标准程序读书笔记-第三章错误和异常处理

    1.命名空间(namespace)std C++标准程序库中的所有标示符都被定义于一个名为std的namespace 2.标准异常类别 (1)语言本身或标准程序库所抛出的所有异常,都派生自基类exce ...

  8. Visual Studio跨平台开发实战(1) - Hello Xamarin!

    原文 Visual Studio跨平台开发实战(1) - Hello Xamarin! 前言 应用程式发展的脚步, 从来没有停过. 从早期的Windows 应用程式, 到网路时代的web 应用程式, ...

  9. Parse 和 Swift 搭建一个像 Instagram

    如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?   [编者按]本篇文章作者是Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客 ...

随机推荐

  1. ActiveMQ源码架构解析第一节(转)

    工作四年已久,也快到了而立之年,本人也酷爱技术,总是想找一些途径来提升自己,想着温故而知新所以就写起了博客,然而写博客这个想法也是酝酿了很久,近期也看到了有很多人在问关于ActiveMQ的相关问题,有 ...

  2. 怎样将android studio项目导入eclipse

    如今,越来越多的开源项目都是用android studio来开发的,所以源码都与eclipse有所不同. 以下是将android studio项目导入eclipse的一般步骤: 1. 先解压项目: 2 ...

  3. mindmanager2012打开文件出现runtime error r6025 解决方式

    关于mindmanager 2012启动无法执行,提示c++错误 ---------------------------Microsoft Visual C++ Runtime Library---- ...

  4. Android学习十九:ContentProvider初步

    一.Content Provider基本概念 1.ContentProvider为存储和获取数据提供了统一的接口.ContentProvide对数据进行封装.不用关心数据存储的细节.使用表的形式来组织 ...

  5. 【Java探索道路安全系列:Java可扩展的安全架构】一间:Java可扩展的安全体系结构开始

    笔者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...

  6. Cocos2d-x 2地图步行实现:SPFA算法

    本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee 上一节<Cocos2d-x 地图行走的实现1:图论与Dijkstra算法> ...

  7. Hive综合HBase——经Hive阅读/书写 HBase桌子

    社论: 本文将Hive与HBase整合在一起,使Hive能够读取HBase中的数据,让Hadoop生态系统中最为经常使用的两大框架互相结合.相得益彰. watermark/2/text/aHR0cDo ...

  8. hdu 4107当卡段树

    其核心思想是记录最大的节点值和最低值,假设max<p要么min>=p时间,在节点只变化add值,不要子树遍历:否则,就往子树递归. #include<iostream> #in ...

  9. Codeforces 432E Square Tiling(结构体+贪婪)

    题目连接:Codeforces 432E Square Tiling 题目大意:给出一个n∗m的矩阵,要求对该矩阵进行上色,用大写字母,可是每次上色的区域必须是正方形,不求相邻的上色区域不能有同样的颜 ...

  10. 二十7天 春雨滋润着无形 —Spring依赖注入

    6月11日,明确."夏条绿已密,朱萼缀明鲜.炎炎日正午,灼灼火俱燃." IT人习惯把详细的事物加工成的形状一致的类.正是这种一致,加上合适的规范.才干彰显对象筋道的牙感和bean清 ...