// // UIView+DDKit.m // DDCategory // // Created by DeJohn Dong on 15-3-20. // Copyright (c) 2015年 DDKit. All rights reserved. // #import "UIView+DDKit.h" #import "MBProgressHUD.h" #import @implementation UIView (DDKit) @end @implementation UIView (DDSeparator) - (void)dd_addSeparatorWithType:(ViewSeparatorType)type { [self dd_addSeparatorWithType:type withColor:nil]; } - (void)dd_addSeparatorWithType:(ViewSeparatorType)type withColor:(UIColor *)color { switch (type) { case ViewSeparatorTypeVerticalSide:{ UIImageView *topLine = [[self class] dd_instanceHorizontalLine:self.frame.size.width color:color]; [self addSubview:topLine]; topLine.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth; UIImageView *bottomLine = [[self class] dd_instanceHorizontalLine:self.frame.size.width color:color]; bottomLine.frame = CGRectMake(0.0, self.frame.size.height - SeparatorWidth, bottomLine.frame.size.width, SeparatorWidth); [self addSubview:bottomLine]; bottomLine.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleWidth; } break; case ViewSeparatorTypeBottom:{ UIImageView *bottomLine = [[self class] dd_instanceHorizontalLine:self.frame.size.width color:color]; bottomLine.frame = CGRectMake(0.0, self.frame.size.height - SeparatorWidth, bottomLine.frame.size.width, SeparatorWidth); [self addSubview:bottomLine]; bottomLine.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth; } break; case ViewSeparatorTypeTop:{ UIImageView *topLine = [[self class] dd_instanceHorizontalLine:self.frame.size.width color:color]; [self addSubview:topLine]; topLine.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleWidth; } break; default: break; } } + (UIImageView *)dd_instanceHorizontalLine:(CGFloat)width { return [self dd_instanceHorizontalLine:width color:[UIColor lightGrayColor]]; } + (UIImageView *)dd_instanceVerticalLine:(CGFloat)height { return [self dd_instanceVerticalLine:height color:[UIColor lightGrayColor]]; } + (UIImageView *)dd_instanceHorizontalLine:(CGFloat)width color:(UIColor *)color { UIImageView *line = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, width, SeparatorWidth)]; line.backgroundColor = color?:[UIColor lightGrayColor]; return line; } + (UIImageView *)dd_instanceVerticalLine:(CGFloat)height color:(UIColor *)color{ UIImageView *line = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, SeparatorWidth, height)]; line.backgroundColor = color?:[UIColor lightGrayColor]; return line; } @end @implementation UIView (nib) + (NSString *)nibName { return [self description]; } + (id)dd_loadFromNIB { Class kClass = [self class]; NSString *nibName = [self nibName]; NSArray *objects = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil]; for (id object in objects) { if ([object isKindOfClass:kClass]) { return object; } } [NSException raise:@"WrongNibFormat" format:@"Nib for '%@' must contain one UIView, and its class must be '%@'", nibName, NSStringFromClass(kClass)]; return nil; } @end @interface UIView() @property (nonatomic, strong) MBProgressHUD *hud; @end @implementation UIView (DD_MBProgressHUD) #pragma mark - runtime - (void)setHud:(MBProgressHUD *)hud { objc_setAssociatedObject(self, @selector(hud), hud, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (MBProgressHUD *)hud { return objc_getAssociatedObject(self, _cmd); } #pragma mark - methods - (void)dd_showMessageHUD:(NSString *)message { if(!self.hud) self.hud = [MBProgressHUD showHUDAddedTo:self animated:YES]; self.hud.mode = MBProgressHUDModeText; self.hud.labelText = [message isKindOfClass:[NSString class]]?message:@""; self.hud.yOffset = -50.0f; self.hud.userInteractionEnabled = NO; [self.hud show:YES]; } - (void)dd_removeHUD{ [self.hud hide:YES]; self.hud = nil; } #pragma mark - static methods + (void)dd_showMessage:(NSString *)message { [self dd_showMessage:message onParentView:nil]; } + (void)dd_showMessage:(NSString *)message onParentView:(UIView *)parentView { if (!parentView) { UIWindow *topWindows = [[[UIApplication sharedApplication] windows] lastObject]; parentView = topWindows; } MBProgressHUD *messageHud = [MBProgressHUD showHUDAddedTo:parentView animated:YES]; messageHud.mode = MBProgressHUDModeText; messageHud.labelText = [message isKindOfClass:[NSString class]]?message:@""; messageHud.yOffset = -50.0f; messageHud.userInteractionEnabled = NO; [messageHud hide:YES afterDelay:1.0f]; } + (void)dd_showDetailMessage:(NSString *)message { [self dd_showDetailMessage:message onParentView:nil]; } + (void)dd_showDetailMessage:(NSString *)message onParentView:(UIView *)parentView { if (!parentView) { UIWindow *topWindows = [[[UIApplication sharedApplication] windows] lastObject]; parentView = topWindows; } MBProgressHUD *messageHud = [MBProgressHUD showHUDAddedTo:parentView animated:YES]; messageHud.mode = MBProgressHUDModeText; messageHud.labelText = NSLocalizedString(@"alert_title", @"提示"); messageHud.detailsLabelText = [message isKindOfClass:[NSString class]]?message:@""; messageHud.yOffset = -50.0f; messageHud.userInteractionEnabled = NO; [messageHud hide:YES afterDelay:1.0f]; } @end @implementation UIView (DDScreenshot) - (UIImage *)dd_screenshot { UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0); [self.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return screenshot; } - (UIImage *)dd_screenshotWithOffsetY:(CGFloat)deltaY { UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0); CGContextRef ctx = UIGraphicsGetCurrentContext(); // KEY: need to translate the context down to the current visible portion of the tablview CGContextTranslateCTM(ctx, 0, deltaY); [self.layer renderInContext:ctx]; UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return screenshot; } @end @implementation UIView (DDCornerRadius) - (void)dd_addCornerRadius:(CGFloat)radius { self.layer.cornerRadius = radius; self.clipsToBounds = YES; } - (void)dd_addCornerRadius:(CGFloat)radius lineColor:(UIColor *)lineColor { self.layer.cornerRadius = radius; self.clipsToBounds = YES; if(lineColor){ self.layer.borderColor = lineColor.CGColor; self.layer.borderWidth = SeparatorWidth; } } @end