iOS 扩展方法

UIView的扩展:

#import <UIKit/UIKit.h>

@interface UIView (Ext)


/**
 width 宽度
 */
@property (nonatomic, assign) CGFloat width;

/**
 height 高度
 */
@property (nonatomic, assign) CGFloat height;

/**
 top 顶部y坐标
 */
@property (nonatomic, assign) CGFloat top;

/**
 left 左侧x坐标
 */
@property (nonatomic, assign) CGFloat left;

/**
 bottom 底部y坐标
 */
@property (nonatomic, assign) CGFloat bottom;

/**
 right 右侧x坐标
 */
@property (nonatomic, assign) CGFloat right;

/**
 origin
 */
@property (nonatomic, assign) CGPoint origin;

/**
 size 尺寸
 */
@property (nonatomic, assign) CGSize size;
UIView+Ext.m

#import "UIView+Ext.h"

@implementation UIView (Ext)

- (void)setSize:(CGSize)size{

    CGRect newFrame = self.frame;
    newFrame.size = size;
    self.frame = newFrame;
}
- (CGSize)size{

    return self.frame.size;
}

- (void)setOrigin:(CGPoint)origin{

    CGRect newFrame = self.frame;
    newFrame.origin = origin;
    self.frame = newFrame;
}
- (CGPoint)origin{

    return self.frame.origin;
}

- (void)setLeft:(CGFloat)left {

    CGRect newFrame = self.frame;
    newFrame.origin.x = left;
    self.frame = newFrame;
}
- (CGFloat)left {

    return self.origin.x;
}

- (void)setRight:(CGFloat)right {

    CGRect newFrame = self.frame;
    newFrame.origin.x = right - self.width;
    self.frame = newFrame;
}
- (CGFloat)right {

    return self.frame.origin.x + self.width;
}

- (void)setTop:(CGFloat)top {

    CGRect newFrame = self.frame;
    newFrame.origin.y = top;
    self.frame = newFrame;
}
- (CGFloat)top {

    return self.frame.origin.y;
}

- (void)setBottom:(CGFloat)bottom {

    CGRect newFrame = self.frame;
    newFrame.origin.y = bottom - self.height;
    self.frame = newFrame;
}
- (CGFloat)bottom {

    return self.frame.origin.y + self.height;
}

- (void)setWidth:(CGFloat)width {

    CGRect newFrame = self.frame;
    newFrame.size.width = width;
    self.frame = newFrame;
}
- (CGFloat)width {

    return self.frame.size.width;
}

- (void)setHeight:(CGFloat)height {

    CGRect newFrame = self.frame;
    newFrame.size.height = height;
    self.frame = newFrame;
}
- (CGFloat)height {

    return self.frame.size.height;
}

字符串NSString的扩展:

#import <UIKit/UIKit.h>

@interface NSString (Ext)


/**
 判断字符串是否为空

 @return <#return value description#>
 */
- (BOOL)isNull;

/**
 获取字符串的宽度

 @param size 尺寸
 @param fontSize 字体大小
 @return <#return value description#>
 */
- (CGFloat)widthWithSize:(CGSize)size fontSize:(CGFloat)fontSize;

/**
 获取字符串高度

 @param size 尺寸
 @param fontSize 字体大小
 @return <#return value description#>
 */
- (CGFloat)heightWithSize:(CGSize)size fontSize:(CGFloat)fontSize;

/**
 判断是否是有效的电话号码

 @return <#return value description#>
 */
- (BOOL)isValidMobileNumber;

/**
 将时间戳转换为时间

 @return <#return value description#>
 */
- (NSString *)stampToDatestring;


/**
 判断是否是有效的邮箱

 @return <#return value description#>
 */
- (BOOL)isValidEmail;

/**
是否是字母和数字的组合
*/
-(BOOL)checkIsHaveNumAndLetter;

/**
判断是否包含汉字
*/
-(BOOL)estimateStringContainChinese:(NSString*)text;

/**
判断是否包含英文字母
*/
-(BOOL)estimateStringContainEnglish:(NSString*)text;
#import "NSString+Ext.h"

@implementation NSString (Ext)

- (BOOL)isNull {

    if (self == nil
        || [self isKindOfClass:[NSNull class]]
        || [self isEqualToString:@"<null>"]
        || [self isEqualToString:@"null"]
        || [self isEqualToString:@"(null)"]
        || [self isEqualToString:@""]) {

        return YES;
    }

    return NO;
}

- (CGFloat)widthWithSize:(CGSize)size fontSize:(CGFloat)fontSize {

    CGRect rect = [self boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:fontSize]} context:nil];

    return ceilf(rect.size.width);
}

- (CGFloat)heightWithSize:(CGSize)size fontSize:(CGFloat)fontSize {

    CGRect rect = [self boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:fontSize]} context:nil];

    return ceilf(rect.size.height);
}

- (BOOL)isValidMobileNumber {

    if (self.length != 11)
    {
        return NO;
    }
    /**
     * 手机号码:
     * 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[0, 1, 6, 7, 8], 18[0-9]
     * 移动号段: 134,135,136,137,138,139,147,150,151,152,157,158,159,170,178,182,183,184,187,188
     * 联通号段: 130,131,132,145,155,156,170,171,175,176,185,186
     * 电信号段: 133,149,153,170,173,177,180,181,189
     */
    NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|7[0135678]|8[0-9])\\d{8}$";
    /**
     * 中国移动:China Mobile
     * 134,135,136,137,138,139,147,150,151,152,157,158,159,170,178,182,183,184,187,188
     */
    NSString *CM = @"^1(3[4-9]|4[7]|5[0-27-9]|7[08]|8[2-478])\\d{8}$";
    /**
     * 中国联通:China Unicom
     * 130,131,132,145,155,156,170,171,175,176,185,186
     */
    NSString *CU = @"^1(3[0-2]|4[5]|5[56]|7[0156]|8[56])\\d{8}$";
    /**
     * 中国电信:China Telecom
     * 133,149,153,170,173,177,180,181,189
     */
    NSString *CT = @"^1(3[3]|4[9]|53|7[037]|8[019])\\d{8}$";


    NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
    NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];
    NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];
    NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];

    if (([regextestmobile evaluateWithObject:self] == YES)
        || ([regextestcm evaluateWithObject:self] == YES)
        || ([regextestct evaluateWithObject:self] == YES)
        || ([regextestcu evaluateWithObject:self] == YES))
    {
        return YES;
    }
    else
    {
        return NO;
    }
}

- (NSString *)stampToDatestring {

    NSDate *d = [[NSDate alloc] initWithTimeIntervalSince1970:[self longLongValue]/1000.0];

    NSDateFormatter*dateFormatter = [[NSDateFormatter alloc]init];

    //设定时间格式,这里可以设置成自己需要的格式
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSString*currentDateStr = [dateFormatter stringFromDate:d];

    return currentDateStr;
}

- (BOOL)isValidEmail {

    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailTest evaluateWithObject:self];
}

-(BOOL)checkIsHaveNumAndLetter
{
    //数字条件
    NSRegularExpression *tNumRegularExpression = [NSRegularExpression regularExpressionWithPattern:@"[0-9]" options:NSRegularExpressionAllowCommentsAndWhitespace error:nil];

    //符合数字条件的有几个字节
    NSUInteger tNumMatchCount = [tNumRegularExpression numberOfMatchesInString:self
                                                                       options:NSMatchingReportProgress
                                                                         range:NSMakeRange(0, self.length)];

    //英文字条件
    NSRegularExpression *sLetterRegularExpression = [NSRegularExpression regularExpressionWithPattern:@"[a-z]" options:NSRegularExpressionAllowCommentsAndWhitespace error:nil];

    //符合英文字条件的有几个字节
    NSUInteger sLetterMatchCount = [sLetterRegularExpression numberOfMatchesInString:self options:NSMatchingReportProgress range:NSMakeRange(0, self.length)];

    //英文字条件
    NSRegularExpression *tLetterRegularExpression = [NSRegularExpression regularExpressionWithPattern:@"[A-Z]" options:NSRegularExpressionAllowCommentsAndWhitespace error:nil];

    //符合英文字条件的有几个字节
    NSUInteger tLetterMatchCount = [tLetterRegularExpression numberOfMatchesInString:self options:NSMatchingReportProgress range:NSMakeRange(0, self.length)];

    // 没有大写或小写
    if ((tLetterMatchCount == 0 && sLetterMatchCount == 0) || tNumMatchCount == 0) {

        return NO;
    } else {
        if(tNumMatchCount + tLetterMatchCount + sLetterMatchCount == self.length){

            return YES;
        }else{
            return NO;
        }
    }
}

-(BOOL)estimateStringContainChinese:(NSString*)text{
    if(text){
        for (int i=0; i<text.length; i++) {
            NSRange range = NSMakeRange(i,1);
            NSString *subString = [text substringWithRange:range];
            const char *cString = [subString UTF8String];
            if (strlen(cString) == 3){ //代表有汉字
                return YES;  
            }
        }
    }
    return NO;
}

-(BOOL)estimateStringContainEnglish:(NSString*)text{
    if(text){
        for (int i=0; i<text.length; i++) {
            NSRange range = NSMakeRange(i,1);
            NSString *subString = [text substringWithRange:range];
            const char *cString = [subString UTF8String];
            if (strlen(cString) == 1){ //代表有英文
                return YES;
            }
        }
    }
    return NO;
}

UIAlertView的扩展:

#import <UIKit/UIKit.h>

@interface UIAlertView (Ext)


/**
 自定义alertView

 @param title 标题
 @param messgae 内容
 @param cancelTitle 取消按钮标题
 @param confirmTitle 确定按钮标题
 @param cancel 取消回调
 @param confirm 确定回调
 @return <#return value description#>
 */
+ (instancetype)alertWithTitle:(NSString *)title messgae:(NSString *)messgae cancelTitle:(NSString *)cancelTitle confirmTitle:(NSString *)confirmTitle cancel:(void(^)())cancel confirm:(void(^)())confirm;
#import "UIAlertView+Ext.h"
#import <objc/runtime.h>

typedef void(^Confirm)();
typedef void(^Cancel)();
static const void *UIAlertViewOriginalDelegateKey                = &UIAlertViewOriginalDelegateKey;
static const void *UIAlertViewCancelBlockKey                     = &UIAlertViewCancelBlockKey;
static const void *UIAlertViewSubmitBlockKey                     = &UIAlertViewSubmitBlockKey;


@implementation UIAlertView (Ext)


+ (instancetype)alertWithTitle:(NSString *)title messgae:(NSString *)messgae cancelTitle:(NSString *)cancelTitle confirmTitle:(NSString *)confirmTitle cancel:(void (^)())cancel confirm:(void (^)())confirm{

    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:title message:messgae delegate:self cancelButtonTitle:cancelTitle otherButtonTitles:confirmTitle, nil];

    if (confirm) {
        [alert setDidConfirmBlock:confirm];
    }
    if (cancel) {
        [alert setCancelBlock:cancel];
    }
    return alert;
}

- (void)setDidConfirmBlock:(Confirm)didPresentBlock {
    [self _checkAlertViewDelegate];
    objc_setAssociatedObject(self, UIAlertViewSubmitBlockKey, didPresentBlock, OBJC_ASSOCIATION_COPY);
}
- (Confirm)didConfirmBlock {
    return objc_getAssociatedObject(self, UIAlertViewSubmitBlockKey);
}

- (void)setCancelBlock:(Cancel)cancelBlock {
    [self _checkAlertViewDelegate];
    objc_setAssociatedObject(self, UIAlertViewCancelBlockKey, cancelBlock, OBJC_ASSOCIATION_COPY);
}
- (Cancel)cancelBlock {
    return objc_getAssociatedObject(self, UIAlertViewCancelBlockKey);
}
- (void)_checkAlertViewDelegate {
    if (self.delegate != (id<UIAlertViewDelegate>)self) {
        objc_setAssociatedObject(self, UIAlertViewOriginalDelegateKey, self.delegate, OBJC_ASSOCIATION_ASSIGN);
        self.delegate = (id<UIAlertViewDelegate>)self;
    }
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    switch (buttonIndex) {
        case 0:
        {
            Cancel cancel = [alertView cancelBlock];
            cancel();
        }
            break;
        case 1:
        {
            Confirm confirm = [alertView didConfirmBlock];
            confirm();
        }
            break;
        default:
            break;
    }
}

@end

UIImage的扩展:

#import <UIKit/UIKit.h>

@interface UIImage (Ext)

/**
 压缩图片至指定大小

 @param size <#size description#>
 @return <#return value description#>
 */
- (UIImage*)scaleToSize:(CGSize)size;
@end
#import "UIImage+Ext.h"

@implementation UIImage (Ext)

- (UIImage*)scaleToSize:(CGSize)size
{
    // 创建一个bitmap的context
    // 并把它设置成为当前正在使用的context
    UIGraphicsBeginImageContext(size);

    // 绘制改变大小的图片
    [self drawInRect:CGRectMake(0, 0, size.width, size.height)];

    // 从当前context中创建一个改变大小后的图片
    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();

    // 使当前的context出堆栈
    UIGraphicsEndImageContext();

    // 返回新的改变大小后的图片
    return scaledImage;
}
@end

UIImageView的扩展:

#import <UIKit/UIKit.h>

@interface UIImageView (Ext)


/**
 旋转图片

 @param angle 角度
 @param duation 时间
 */
- (void)rotationByAngle:(CGFloat)angle Duation:(CGFloat)duation;


/**
 旋转图片

 @param angle 角度
 @param duation 时间
 @param delay 延迟
 */
- (void)rotationByAngle:(CGFloat)angle Duation:(CGFloat)duation Delay:(CGFloat)delay;

@end
#import "UIImageView+Ext.h"

@implementation UIImageView (Ext)


- (void)rotationByAngle:(CGFloat)angle Duation:(CGFloat)duation
{
    CABasicAnimation* rotationAnimation;
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    rotationAnimation.toValue = [NSNumber numberWithFloat: angle * (M_PI / 180.0f) ];
    rotationAnimation.duration = duation;
    rotationAnimation.cumulative = YES;
    rotationAnimation.repeatCount = 0;

    [self.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}

- (void)rotationByAngle:(CGFloat)angle Duation:(CGFloat)duation Delay:(CGFloat)delay
{
    CGAffineTransform endAngle = CGAffineTransformMakeRotation(angle * (M_PI / 180.0f));
    [UIView animateWithDuration:duation delay:delay options:UIViewAnimationOptionCurveLinear animations:^{
        self.transform = endAngle;
    } completion:^(BOOL finished) {

    }];
}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值