美文网首页区块链
iOS 颜色渐变的三种方法

iOS 颜色渐变的三种方法

作者: bobociel | 来源:发表于2017-05-19 18:26 被阅读273次

    OpenGL相关网址:
    http://blog.csdn.net/szchtx/article/details/7063921 (计算机图形学到底讲了什么)
    https://learnopengl-cn.github.io/ (openGL初级,中级,高级)
    http://blog.csdn.net/slience_perseverance/article/details/8096233 (七天学习OpenGL入门)
    http://www.cnblogs.com/crazyxiaom/articles/2073586.html (黑色openGL入门学习)
    http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html (白色openGL入门学习)
    http://cg.cs.tsinghua.edu.cn/course/resource_main.htm (计算机图形学教学大纲)

    绘制渐变的三种方法

    1. CAGradientLayer
      We are not going to discuss the details of how to use CAGradientLayer. There is a good article talking about it: http://www.cnblogs.com/YouXianMing/p/3793913.html.
    CAGradientLayer *layer = [CAGradientLayer new];  
    layer.colors = @[(__bridge id)_inputColor0.CGColor, (__bridge id)_inputColor1.CGColor];  
    layer.startPoint = _inputPoint0;  
    layer.endPoint = _inputPoint1;  
    layer.frame = self.bounds;             
    [self.layeraddSublayer:layer];  
    
    1. CGGradientRef
      About Core Graphics and Core Image, please refer here, a very very good article: http://www.techotopia.com/index.php/An_iOS_7_Graphics_Tutorial_using_Core_Graphics_and_Core_Image
      Note that CAGradientLayer is using unit coordinate space while Core Graphics and Core Image are not. More Interestingly, Core Graphics’ coordinate space where (0, 0) starts at the top left is different from Core Image’s where (0, 0) starts at bottom left.
      The following code is called in drawRect:.
    CGContextRef context = UIGraphicsGetCurrentContext();  
    UIGraphicsPushContext(context);  
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();  
    CGFloat locations[] = {0,1};  
    NSArray *colors = @[(__bridge id)_inputColor0.CGColor, (__bridge id)_inputColor1.CGColor];  
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef) colors, locations);  
    CGColorSpaceRelease(colorSpace);  
      
    CGPoint startPoint = (CGPoint){rect.size.width * _inputPoint0.x, rect.size.height * _inputPoint0.y};  
    CGPoint endPoint = (CGPoint){rect.size.width * _inputPoint1.x, rect.size.height * _inputPoint1.y};  
    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);  
    CGGradientRelease(gradient);  
    UIGraphicsPopContext();  
    

    3.Core Image
    The following code is called in drawRect:.

    CIFilter *ciFilter = [CIFilter filterWithName:@"CILinearGradient"];  
    CIVector *vector0 = [CIVector vectorWithX:rect.size.width * _inputPoint0.x Y:rect.size.height * (1 - _inputPoint0.y)];  
    CIVector *vector1 = [CIVector vectorWithX:rect.size.width * _inputPoint1.x Y:rect.size.height * (1 - _inputPoint1.y)];  
    [ciFilter setValue:vector0 forKey:@"inputPoint0"];  
    [ciFilter setValue:vector1 forKey:@"inputPoint1"];  
    [ciFilter setValue:[CIColor colorWithCGColor:_inputColor0.CGColor] forKey:@"inputColor0"];  
    [ciFilter setValue:[CIColor colorWithCGColor:_inputColor1.CGColor] forKey:@"inputColor1"];  
       
    CIImage *ciImage = ciFilter.outputImage;  
    CIContext *con = [CIContext contextWithOptions:nil];  
    CGImageRef resultCGImage = [con createCGImage:ciImage  
                                           fromRect:rect];  
    UIImage *resultUIImage = [UIImage imageWithCGImage:resultCGImage];  
    CGImageRelease(resultCGImage);  
       
    [resultUIImage drawInRect:rect];  
    

    来源:http://blog.csdn.net/lgouc/article/details/47254839

    使用代码加入字体

    1.针对TTF、OTF格式

    -(UIFont*)customFontWithPath:(NSString*)path size:(CGFloat)size
    {
        NSURL *fontUrl = [NSURL fileURLWithPath:path];
        CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)fontUrl);
        CGFontRef fontRef = CGFontCreateWithDataProvider(fontDataProvider);
        CGDataProviderRelease(fontDataProvider);
        CTFontManagerRegisterGraphicsFont(fontRef, NULL);
        NSString *fontName = CFBridgingRelease(CGFontCopyPostScriptName(fontRef));
        UIFont *font = [UIFont fontWithName:fontName size:size];
        CGFontRelease(fontRef);
        return font;
    }
    

    2.针对TTC格式

    -(NSArray*)customFontArrayWithPath:(NSString*)path size:(CGFloat)size
    {
        CFStringRef fontPath = CFStringCreateWithCString(NULL, [path UTF8String], kCFStringEncodingUTF8);
        CFURLRef fontUrl = CFURLCreateWithFileSystemPath(NULL, fontPath, kCFURLPOSIXPathStyle, 0);
        CFArrayRef fontArray =CTFontManagerCreateFontDescriptorsFromURL(fontUrl);
        CTFontManagerRegisterFontsForURL(fontUrl, kCTFontManagerScopeNone, NULL);
        NSMutableArray *customFontArray = [NSMutableArray array];
        for (CFIndex i = 0 ; i < CFArrayGetCount(fontArray); i++){
            CTFontDescriptorRef  descriptor = CFArrayGetValueAtIndex(fontArray, i);
            CTFontRef fontRef = CTFontCreateWithFontDescriptor(descriptor, size, NULL);
            NSString *fontName = CFBridgingRelease(CTFontCopyName(fontRef, kCTFontPostScriptNameKey));
            UIFont *font = [UIFont fontWithName:fontName size:size];
            [customFontArray addObject:font];
        }
        
        return customFontArray;
    }
    

    TTF(TrueTypeFont)是一种字库名称。TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件表示方式。

    TTC字体是TrueType字体集成文件(. TTC文件),是在一单独文件结构中包含多种字体,以便更有效地共享轮廓数据,当多种字体共享同一笔画时,TTC技术可有效地减小字体文件的大小。
    TTC是几个TTF合成的字库,安装后字体列表中会看到两个以上的字体。两个字体中大部分字都一样时,可以将两种字体做成一个TTC文件,常见的TTC字体,因为共享笔划数据,所以大多这个集合中的字体区别只是字符宽度不一样,以便适应不同的版面排版要求。

    而TTF字体则只包含一种字型。

    来源:http://www.cnblogs.com/vicstudio/p/3961195.html

    相关文章

      网友评论

        本文标题:iOS 颜色渐变的三种方法

        本文链接:https://www.haomeiwen.com/subject/jsayxxtx.html