美文网首页
iOS 视图优化要点

iOS 视图优化要点

作者: iOS开发小菜鸟 | 来源:发表于2020-07-21 18:11 被阅读0次

    模拟器上Debug的4个选项

    image.png

    Color Blended Layers

    定义:屏幕上的每个像素点的颜色是由当前像素点上的多层layer共同决定的,GPU会进行计算出混合颜色的RGB值,最终显示在屏幕上。而这需要让GPU计算,所以我们要尽量避免设置alpha,这样GPU会忽略下面所有的layer。

    设置图片的透明度代码:

    //设置图片的透明度
    - (UIImage *)imageByApplyingAlpha:(CGFloat)alpha image:(UIImage *)image{
        
        //创建图片的上下文参数:  图片大小,透明度,缩放因子(传0表示根据屏幕的分辨率而变化)
        UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0f);
        //当前上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //画图大小
        CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
        //翻转和移动,是保证坐标匹配
        //翻转Y轴
        CGContextScaleCTM(ctx, 1, -1);
        //向下移动图片高度
        CGContextTranslateCTM(ctx, 0, -rect.size.height);
        //kCGBlendModeMultiply,混合前景和背景的颜色
        CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
        //设置透明度
        CGContextSetAlpha(ctx, alpha);
        //画图
        CGContextDrawImage(ctx, rect, image.CGImage);
        //得到新的图片
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        //结束图片上下文
        UIGraphicsEndImageContext();
        return newImage;
    }
    

    Color Copied Images

    定义:苹果的GPU只解析32bit的颜色格式,如果你放一张图片,而它的颜色格式却不是32bit,CPU会先进行颜色格式转换,再让GPU渲染。

    代码

    - (UIImage *)decodedImageWithImage:(UIImage *)image{
        
        @autoreleasepool {
            
            CGImageRef inputCGImage = [image CGImage];
            size_t width = CGImageGetWidth(inputCGImage);
            size_t height = CGImageGetHeight(inputCGImage);
            
            size_t bytesPerPixel = 4;
            size_t bitsPerComponent = 8;
            size_t bytesPerRow = bytesPerPixel * width;
            
            CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
            
            CGContextRef context = CGBitmapContextCreate(NULL, width, height, bitsPerComponent, bytesPerRow, colorSpaceRef, kCGImageAlphaPremultipliedLast|kCGImageByteOrder32Big);
            
            if (context == NULL) {
                return image;
            }
            
            CGContextDrawImage(context, CGRectMake(0, 0, width, height), inputCGImage);
            CGImageRef imageRef = CGBitmapContextCreateImage(context);
            UIImage *returnImage = [UIImage imageWithCGImage:imageRef];
            
            CGContextRelease(context);
            CGImageRelease(imageRef);
            
            return returnImage;
            
        }
    }
    

    Color Misaligned Images

    定义:不要出现image size 和 imageView size 不同的情况,这样会触发反锯齿计算,增加性能损耗。

    图片改变尺寸代码

    - (UIImage *)changeImageSize:(CGSize)size originImage:(UIImage *)image{
        
        UIGraphicsBeginImageContextWithOptions(size, NO, 0);
        [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
        UIImage *changeImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return changeImage;
    }
    

    Color Offscreen-Rendered

    定义:离屏渲染,这个会单独写一篇博客介绍。

    相关文章

      网友评论

          本文标题:iOS 视图优化要点

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