Wednesday, July 27, 2016

[iOS] NSString to hex value

+ (UIColor*)colorFromHex:(NSString*)hexString
{
    // https://github.com/timd/UIColor-HexValues
    
    hexString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""];
    
    if ([hexString length] == 3) {
        hexString = [NSString stringWithFormat:@"%@%@%@%@%@%@", 
                     [hexString substringWithRange:NSMakeRange(0, 1)],[hexString substringWithRange:NSMakeRange(0, 1)],
                     [hexString substringWithRange:NSMakeRange(1, 1)],[hexString substringWithRange:NSMakeRange(1, 1)],
                     [hexString substringWithRange:NSMakeRange(2, 1)],[hexString substringWithRange:NSMakeRange(2, 1)]];
    }
    
    if ([hexString length] != 6) {
        return nil;
    }
    
    // Brutal and not-very elegant test for non hex-numeric characters
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^a-fA-F|0-9]" options:0 error:NULL];
    NSUInteger match = [regex numberOfMatchesInString:hexString options:NSMatchingReportCompletion range:NSMakeRange(0, [hexString length])];
    
    if (match != 0) {
        return nil;
    }
    
    NSRange rRange = NSMakeRange(0, 2);
    NSString *rComponent = [hexString substringWithRange:rRange];
    NSUInteger rVal = 0;
    NSScanner *rScanner = [NSScanner scannerWithString:rComponent];
    [rScanner scanHexInt:(unsigned int *)&rVal];
    float rRetVal = (float)rVal / 254;
    
    
    NSRange gRange = NSMakeRange(2, 2);
    NSString *gComponent = [hexString substringWithRange:gRange];
    NSUInteger gVal = 0;
    NSScanner *gScanner = [NSScanner scannerWithString:gComponent];
    [gScanner scanHexInt:(unsigned int *)&gVal];
    float gRetVal = (float)gVal / 254;
    
    NSRange bRange = NSMakeRange(4, 2);
    NSString *bComponent = [hexString substringWithRange:bRange];
    NSUInteger bVal = 0;
    NSScanner *bScanner = [NSScanner scannerWithString:bComponent];
    [bScanner scanHexInt:(unsigned int *)&bVal];
    float bRetVal = (float)bVal / 254;
    
    return [UIColor colorWithRed:rRetVal green:gRetVal blue:bRetVal alpha:1.0f];
}

Monday, June 8, 2015

[iOS] Making fancy view with border, corner and shadow


self.imageView.layer.borderColor        = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1].CGColor;
self.imageView.layer.borderWidth        = 1;
self.imageView.layer.cornerRadius       = 3.0;
self.imageView.layer.masksToBounds      = YES;
self.imageView.layer.shouldRasterize    = YES;
self.imageView.layer.rasterizationScale = [UIScreen mainScreen].scale;

self.imageViewBG.layer.shadowOffset       = CGSizeMake(1, 1);
self.imageViewBG.layer.shadowRadius       = 1;
self.imageViewBG.layer.shadowOpacity      = 0.1;
self.imageViewBG.layer.cornerRadius       = 3.0;
self.imageViewBG.layer.masksToBounds      = NO;
self.imageViewBG.layer.shouldRasterize    = YES;
self.imageViewBG.layer.rasterizationScale = [UIScreen mainScreen].scale;
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.imageViewBG.bounds cornerRadius:3.0];
self.imageViewBG.layer.shadowPath = path.CGPath;

Wednesday, April 8, 2015

[iOS] How to get top most view controller?

+ (UIViewController *)topViewController
{
    return [self topViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
}

+ (UIViewController *)topViewController:(UIViewController *)rootViewController
{
    if (rootViewController.presentedViewController == nil) {
        return rootViewController;
    }
    if ([rootViewController.presentedViewController isKindOfClass:[UINavigationController class]]) {
        UINavigationController *navigationController = (UINavigationController *)rootViewController.presentedViewController;
        UIViewController *lastViewController = [[navigationController viewControllers] lastObject];
        return [self topViewController:lastViewController];
    }
    UIViewController *presentedViewController = (UIViewController *)rootViewController.presentedViewController;
    return [self topViewController:presentedViewController];
}

+ (UINavigationController *)navigationController
{
    UIViewController *topViewController = [self topViewController];
    UINavigationController *navigationController = nil;
    if ([topViewController isKindOfClass:[UINavigationController class]])
    {
        navigationController = (UINavigationController *)topViewController;
    }else
    {
        navigationController = topViewController.navigationController;
    }

    return navigationController;
}