Giter Club home page Giter Club logo

yycategories's Introduction

YYCategories

License MIT  Carthage compatible  CocoaPods  CocoaPods  Support  Build Status

A set of useful categories for Foundation and UIKit.
(It's a component of YYKit)

Documentation

You can build and install docset use Docset scheme in Xcode, appledoc need to be pre-installed. Or your can read the Documentation online.

Installation

CocoaPods

  1. Add pod 'YYCategories' to your Podfile.
  2. Run pod install or pod update.
  3. Import <YYCategories/YYCategories.h>.

Carthage

  1. Add github "ibireme/YYCategories" to your Cartfile.
  2. Run carthage update --platform ios and add the framework to your project.
  3. Import <YYCategories/YYCategories.h>.

Manually

  1. Download all the files in the YYCategories subdirectory.
  2. Add the source files to your Xcode project.
  3. Add -fno-objc-arc compiler flag to NSObject+YYAddForARC.m and NSThread+YYAdd.m.
  4. Link with required frameworks:
    • UIKit
    • CoreGraphics
    • QuartzCore
    • Accelerate
    • ImageIO
    • CoreText
    • CoreFoundation
    • libz
  5. Import YYCategories.h.

Documentation

Full API documentation is available on CocoaDocs.
You can also install documentation locally using appledoc.

Requirements

This library requires iOS 6.0+ and Xcode 8.0+.

Notice

I want to use the APIs as if it was provided by system, so I don't add prefix in these categories. This may cause some potential problems(such as conflict with other libraries), so if you just need some pieces of code in this project, pick them out and don't import the whole library.

License

YYCategories is provided under the MIT license. See LICENSE file for details.



中文介绍

功能丰富的 Category 类型工具库。
(该项目是 YYKit 组件之一)

文档

你可以用 Docset scheme 来生成文档 (需要预先安装 appledoc),或者在线查看

安装

CocoaPods

  1. 在 Podfile 中添加 pod 'YYCategories'
  2. 执行 pod installpod update
  3. 导入 <YYCategories/YYCategories.h>。

Carthage

  1. 在 Cartfile 中添加 github "ibireme/YYCategories"
  2. 执行 carthage update --platform ios 并将生成的 framework 添加到你的工程。
  3. 导入 <YYCategories/YYCategories.h>。

手动安装

  1. 下载 YYCategories 文件夹内的所有内容。
  2. 将 YYCategories 内的源文件添加(拖放)到你的工程。
  3. NSObject+YYAddForARC.mNSThread+YYAdd.m 添加编译参数 -fno-objc-arc
  4. 链接以下 frameworks:
    • UIKit
    • CoreGraphics
    • QuartzCore
    • Accelerate
    • ImageIO
    • CoreText
    • CoreFoundation
    • libz
  5. 导入 YYCategories.h

文档

你可以在 CocoaDocs 查看在线 API 文档,也可以用 appledoc 本地生成文档。

系统要求

该项目最低支持 iOS 6.0Xcode 8.0

注意

我希望调用 API 时,有着和调用系统自带 API 一样的体验,所以我并没有为 Category 方法添加前缀。我已经用工具扫描过这个项目中的 API,确保没有对系统 API 产生影响。我知道没有前缀的 Category 可能会带来麻烦(比如可能和其他某些类库产生冲突),所以如果你只需要其中少量代码,那最好将那段代码取出来,而不是导入整个库。

许可证

YYCategories 使用 MIT 许可证,详情见 LICENSE 文件。

yycategories's People

Contributors

ibireme avatar liberty4me avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yycategories's Issues

该类库与Masonry冲突

Masonry 会定义该宏
If you want to use masonry without all those pesky 'mas_' prefixes. Add #define MAS_SHORTHAND to your prefix.pch before importing Masonry

define MAS_SHORTHAND

如果引入YYCategories的话,省略了mas_的代码都会报错。。。。

@“123456” 检测包含 emoji 符号

测试环境模拟器 ios 9.2 (13C75), iPhone 6s Plus:

BOOL ok = [@"123456" containsEmoji];

竟然检测 ok 是 YES。

yy版本是:

pod 'YYCategories', '~> 0.9.3'

UIDevice+YYAdd中- (BOOL)isSimulator方法在iOS10.1中真机模拟器均返回NO

修改后如下:

//引入头文件
#import "sys/utsname.h"
- (BOOL)isSimulator {
    static dispatch_once_t one;
    static BOOL simu;
    dispatch_once(&one, ^{
        struct utsname systemInfo;
        uname(&systemInfo);
        NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
        simu =  ([platform isEqualToString:@"i386"] || [platform isEqualToString:@"x86_64"]);
    });
    return simu;
}

imageWithPDF:方法有个小Bug

通过PDF文件路径获取:
UIImage *image = [UIImage imageWithPDF:[[NSBundle mainBundle] pathForResource:@"4.pdf" ofType:@""]];

会报错:
<Error>: CFURLCreateDataAndPropertiesFromResource: failed with error code -15.

Problem:
pdf = CGPDFDocumentCreateWithURL((__bridge CFURLRef)[NSURL URLWithString:dataOrPath]);
Fix:
pdf = CGPDFDocumentCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:dataOrPath]);

static declaration of 'CGRectGetCenter' follows non-static declaration

property cannot have array or function type 'BOOL (())' (aka 'bool ()')

static inline CGPoint CGRectGetCenter(CGRect rect) {
return CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
}
static declaration of 'CGRectGetCenter' follows non-static declaration

你好,我工程里报错,请问是什么原因?

addActionBlock 中为何会中自动释放 target?

代码没有问题,只是有个地方有点疑惑。以下是 UIGestureRecognizer+YYAdd 的源代码,我尝试注释了把 target 添加到数组的代码。按我的理解之所以加到数组是为了后续方便 remove,但是结果却是 target 出了这个作用域自动释放了,打印 gesture 实例发现 target 也是 nil 。奇怪,难道 addTarget:action 不会对 target 强制持有吗?求解惑。

- (void)addActionBlock:(void (^)(id sender))block {
    _YYUIGestureRecognizerBlockTarget *target = [[_YYUIGestureRecognizerBlockTarget alloc] initWithBlock:block];
    [self addTarget:target action:@selector(invoke:)];
//    NSMutableArray *targets = [self _yy_allUIGestureRecognizerBlockTargets];
//    [targets addObject:target];
}

Xcode 8下使用weakify宏时编译出错

weakify(self);
    [_recordButton addBlockForControlEvents:UIControlEventTouchUpInside block:^(id  _Nonnull sender) {

    }];

错误提示:Unknown type name 'autoreleasepool'; did you mean 'NSAutoreleasePool'?
image

10 warnings

If I were to create a pull request to eliminate these warnings, would you accept it?

they are ALL a result of method parameter definition comments being incorrect.

thanks!

performSelectorWithArgs 内存管理问题

使用performSelectorWithArgs获取返回的对象,会直接释放
在getReturnFromInv:withSig:方法里
case '@': { // id
id ret = nil;
[inv getReturnValue:&ret];
return ret;
};
如果在id前面加上__autoreleasing就没有问题了,但是不知道具体原因是什么

使用体验 :)

首先同为90年出生,好佩服作者。。。
今天用YYCategories,功能上面没的说给力好用,不过引入YYCategories后编译报错,还是我没见过的错误,查了半天也不知道怎么回事。后来仔细地找才发现是YYCategories中的方法名或者宏之类的与项目中的某些定义冲突了(因为项目比较老,所以还在用pch文件,我是直接把YYCategories放到pch文件里了)。总之就是觉得YYCategories的命名还是很容易导致冲突的,个人觉得把命名前面加上yy_前缀就不会有这些意外的事发生了,我能力平平,说的不对请忽略。

是否调用里私有api,无法上线?

首先感谢你分享这么多好用的东西,万分感谢!
其次就是咨询下这些分类中是否用到了系统私有api,导致无法通过审核?
多谢!
再次感谢你的分享~

imageByRoundCornerRadius切圆形头像问题~

你好~ 如标题描述,用贝塞尔曲线对UIImage切成圆形,生成的图片边缘有明显的锯齿,或者说毛刺,显得比较粗糙。如果在UIImageView中直接用layer.cornerRadius则比较顺滑,但是会对fps产生影响。 不知道这个问题是否有解决办法?

imageByRotate不能旋转图片

经测试,imageByRotateRight90并不能有效的旋转头像,原因是imageByRotate函数的方向值调用的是self.orientaton,所以进去啥方向出来还是啥方向,已经验证

UIControl+YYAdd

  • (void)removeAllBlocksForControlEvents:(UIControlEvents)controlEvents;
    UIControlEventAllEvents != UIControlEventTouchUpInside.
    添加的是UIControlEventTouchUpInside, 删除时用UIControlEventAllEvents, 方法里面if 判断的时候, 它俩是不相等的,所以就不会删除

YYSYNTH_DYNAMIC_PROPERTY_CTYPE的getter返回值类型错误

#ifndef YYSYNTH_DYNAMIC_PROPERTY_CTYPE
#define YYSYNTH_DYNAMIC_PROPERTY_CTYPE(_getter_, _setter_, _type_) \
- (void)_setter_ : (_type_)object { \
    [self willChangeValueForKey:@#_getter_]; \
    NSValue *value = [NSValue value:&object withObjCType:@encode(_type_)]; \
    objc_setAssociatedObject(self, _cmd, value, OBJC_ASSOCIATION_RETAIN); \
    [self didChangeValueForKey:@#_getter_]; \
} \
- (type)_getter_ { \
    _type_ cValue = { 0 }; \
    NSValue *value = objc_getAssociatedObject(self, @selector(_setter_:)); \
    [value getValue:&cValue]; \
    return cValue; \
}
#endif

_getter_的返回值应该是_type_

有一条循环引用的问题请教-Block

你好,我在看你的demo中文件T1StatusCell中的T1StatusMediaView类的是够发现你在Block中是先对self进行weak处理 ,然后在block中进行strong处理,请问这样有什么好处吗,为什么不直接使用weakSelf呢?
另外,我看你在block中最后还是使用self,是因为你把self重新赋值了?这样做会有什么好处吗?
能帮我讲解下原因或者推荐一篇相关的文章学习一下吗?万分感谢! @ibireme
123

关于Associated Objects的疑问

在封装UIBarButtonItem的Category的时候,发现你使用了Associated Objects去进行了封装,因为你使用的时候必要时用一个block的property,我想问,下面的方式都能够实现同样的功能,Associated Objects的优点在哪儿?
2016-01-06 9 58 41

UIColor 可以加个 rgb int参数的不?

虽然可以通过

  • (UIColor *)colorWithRGB:(uint32_t)rgbValue;

但是加上这个某些时候更方便些:

  • (UIColor *)colorWithIntRed:(UInt8)red green:(UInt8)green blue:(UInt8)blue alpha:(UInt8)alpha;
  • (UIColor *)colorWithIntRed:(UInt8)red green:(UInt8)green blue:(UInt8)blue;

可以直接使用 RGB(11, 134, 123) 这样的形式了,

为什么要这样写?

if (target.events & controlEvents) {
UIControlEvents newEvent = target.events & (~controlEvents);
if (newEvent) {
[self removeTarget:target action:@selector(invoke:) forControlEvents:target.events];
target.events = newEvent;
[self addTarget:target action:@selector(invoke:) forControlEvents:target.events];
} else {
[self removeTarget:target action:@selector(invoke:) forControlEvents:target.events];
[removes addObject:target];
}
}

第一个if不是已经判断是不是同一个事件了么,第二行是什么意思

你好,我想询问下NSArray分类中的shuffle方法

shuffle 方法可不可以拿来从数组中取一定数量的随机内容? 先洗牌,再取前N个。这样取得的内容符不符合随机的要求?

NSArray *originArray = ......;
NSMutableArray *tmp = [NSMutableArray arrayWithArray:originArray];
[tmp shuffle];
NSUInteger count = 10;
NSArray *randomArray;
if (tmp.count >= count) {
    randomArray = [tmp subarrayWithRange:NSMakeRange(0, count)];
}else{
    randomArray = tmp;
}

UIImage+YYAdd imageWithEmoji无法正确绘制UIImage

Xcode: Xcode 8 Beta
iOS: iOS 10 Beta2

测试将187行:

NSAttributedString *str = [[NSAttributedString alloc] initWithString:emoji attributes:@{ (__bridge id)kCTFontAttributeName:(__bridge id)font, (__bridge id)kCTForegroundColorAttributeName:(__bridge id)[UIColor clearColor].CGColor }];

修改为

NSAttributedString *str = [[NSAttributedString alloc] initWithString:emoji attributes:@{ (__bridge id)kCTFontAttributeName:(__bridge id)font, (__bridge id)kCTForegroundColorAttributeName:(__bridge id)[UIColor blackColor].CGColor }];

即可。不知道为什么AttributedString字体颜色为clear就绘制不出来,大神解释下原因,修复下。

PS:发现iOS 10绘制图片的时候,图片透明部分都会绘制出一个阴影来,微博的link图标就是这样的。

NSDate分类的一个方法看不懂,能否介绍一下

- (NSInteger)yearForWeekOfYear {
    return [[[NSCalendar currentCalendar] components:NSCalendarUnitYearForWeekOfYear fromDate:self] yearForWeekOfYear];
}

weekOfYear 我知道是一年有多少个星期,yearForWeekOfYear ,表示英文差,难以理解哦...

UIView类别的问题

UIView+YYAdd文件 frame那些熟悉能添加类前缀YY吗?因为我用的masonry布局可以设置它里面的宏定义然后布局的时候不用写mas_,我用left right那些的时候就会和UIView的类别冲突的

关于block循环引用的疑问

你好,我在使用UIControl+YYAdd这个分类的时候用到了addBlockForControlEvents:block函数,但是发现当block中引用control的时候编译器会有“block 循环引用”的警告。
按照我们正常的功能来说由于block是运行的时候加进去的,所以编译器应该是无法识别到的。
接着我试着在工程下执行grep "addBlockForControlEvents" * -Rn 命令来查找你是否做了什么设置,但是没有找到什么线索。
所以我想问一下,这个编译器提醒的功能是如何做到的。

Please fix this warning

CGAffineTransform YYCGAffineTransformGetFromPoints(CGPoint before[3], CGPoint after[3]);

Array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)

YYSYNTH_DUMMY_CLASS宏所带来的疑问.

#ifndef YYSYNTH_DUMMY_CLASS
#define YYSYNTH_DUMMY_CLASS(_name_) \
@interface YYSYNTH_DUMMY_CLASS_ ## _name_ : NSObject @end \
@implementation YYSYNTH_DUMMY_CLASS_ ## _name_ @end
#endif

YYSYNTH_DUMMY_CLASS(NSString_YYAdd)
预编译后的内容:

@interface YYSYNTH_DUMMY_CLASS_NSString_YYAdd : NSObject @end
@implementation YYSYNTH_DUMMY_CLASS_NSString_YYAdd @end

这样可以防止在工程中的文件中加入-all_load``-force_load
这点原理,没搞明白,有相关的资料没?
http://developer.apple.com/library/mac/#qa/qa2006/qa1490.html
这个网址打开找不到.

yaoyuan大神 转换double的时候出现精度丢失的问题

    NSDecimalNumber *a = [NSDecimalNumber decimalNumberWithString:[YPDataHandle shareHandle].stageDataModel.san];

    NSDecimalNumber *b =[NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%d",100]];

    NSDecimalNumberHandler * handler = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundBankers scale:6 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];

    NSDecimalNumber *result = [[a decimalNumberByDividingBy:b] decimalNumberByRoundingAccordingToBehavior:handler];

    NSString *numString = [NSString stringWithFormat:@"%.6lf",[result doubleValue]];

    feiLv = [numString doubleValue];

numString 为@"0.01800" 但是转换成doubleValue之后精度出现了丢失 feiLv 为0.017999999999999999

无论我尝试用NSString转化为double 或者NSDecimalNumber转化为double 都会出现这个情况 因为做的一款货币类型的app 这样计算很不准确 请问yaoyuan大神有没有什么好的解决办法 ~~

UIDevice+YYAdd

model返回的值不再有simulator了,用TARGET_OS_SIMULATOR来处理吧

- (BOOL)isSimulator {
    static dispatch_once_t one;
    static BOOL simu;
    dispatch_once(&one, ^{
        // No more working any more. Do it at build time.
        // simu = NSNotFound != [[self model] rangeOfString:@"Simulator"].location;
#if TARGET_OS_SIMULATOR
        simu = YES;
#else
        simu = NO;
#endif
    });
    return simu;
}

imageByInsetEdge:withColor:方法无法显示边框颜色

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
UIImage *image = [[UIImage imageNamed:@"1"] imageByInsetEdge:UIEdgeInsetsMake(0, 10, 0, 0) withColor:[UIColor redColor]];
[imageView setImage:image];
[self.view addSubview:imageView];

能看到图片被盖了, 但是是白色的, 并无红色啊。。。

在NSString+YYAdd的.m文件中62行if (!regex) return; 是不是应该判断pattern呢?

在NSString+YYAdd的.m文件中62行if (!regex) return; 是不是应该判断pattern?

  • (void)enumerateRegexMatches:(NSString *)regex
    options:(NSRegularExpressionOptions)options
    usingBlock:(void (^)(NSString *match, NSRange matchRange, BOOL *stop))block {
    if (regex.length == 0 || !block) return;
    NSRegularExpression *pattern = [NSRegularExpression regularExpressionWithPattern:regex options:options error:nil];
    if (!regex) return;
    [pattern enumerateMatchesInString:self options:kNilOptions range:NSMakeRange(0, self.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
    block([self substringWithRange:result.range], result.range, stop);
    }];
    }

问题解决了飘过

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.