ios- UIImageView 序列帧实现gif图 直播送礼效果 图片拉伸

UIImageView局部拉伸

       [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:[AnchorRoom currentRoom].bgLockRoom] options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
                if (image) {
//调整到即将拉伸后的宽度或者高度,拉伸的时候不会变形,注意拉伸的时候,拉伸是欧UIEdgeInsetsMake也会相对变化
         image = [UIImage reSizeImage:image toSize:CGSizeMake(self.contentView.frame.size.width+20, image.size.height/image.size.width*(self.contentView.frame.size.width+20))];
           //上方80和下方80不变,中间进行压缩和拉伸,注意预留足够压缩的中间的位置,不然出现上方和下方的变形,情况是拉伸没问题,压缩有问题
                    CGFloat top = 80;
                    CGFloat left = 0;
                    CGFloat bottom =80;
                    CGFloat right = 0;
                    UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);
                    // 指定为竖直方向中间拉伸模式
                    image = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch];
                    _imageViewSkin.image = image;

                }
            }];

//            _imageViewSkin.contentMode = UIViewContentModeScaleAspectFill;//不能开启自适应模式
            [_imageViewSkin  mas_makeConstraints:^(MASConstraintMaker *make) {
                make.edges.equalTo(self.contentView).insets(UIEdgeInsetsMake(-self.contentView.frame.size.height/3, -15, -60, -15));
            }];

UIImageView 或者 CALayer   +定时器类

1.使用 【 UIImage imageWithContentsOfFile】从磁盘映射方式加载图片数据流(创建了一个文件映射数据, 图片文件既没有真正被加载到内存, 更没有被解码成位图的形式可供Core Animation渲染)
2.讲UIImage 赋值给 UIImageView这个过程,隐式的CATransaction(事物)会捕获到imageView图层树的变化,并在下一个runloop到来时提交事务,处理过程中包涵1.分配缓冲区管理文件IO和解压缩操作2.讲文件数据从磁盘读到内容中,3.将压缩的图片数据解码成位图形式(将图片的二进制数据转换成像素数据) 4.最后由CoreAnimation将位图数据通过gpu渲染到UIimageview图层,其中解压缩是个非常耗时的cpu操作,默认是主线程执行,卡顿,影响流畅性,而且位图数据会消耗很多内存。

组合方式 CALayer+delegate+CADisplayLink来实现核心动画CAKeyframeAnimation形式

1.使用 【 UIImage imageWithContentsOfFile】方法从磁盘中加载大图,不进行缓存

2.CADisplayLink是根据屏幕刷新触发返回,通过累加返回确定下一帧图片的播放时刻,在当前关键帧里,异步进行图片强制解压缩生成位图数据并提供给CALayer显示,防止阻塞主线程,,当播放到下一张时候,上一张图片数据已无任何引用,内存也得到释放。

3.后续  减少上下文切换解压缩进行预加载,用delegate回调播放进度,图片资源下载更新管理等操作

https://www.jianshu.com/p/094c2c0f209e

http://www.cocoachina.com/articles/18784

https://www.jianshu.com/p/4135b7de046c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值