美文网首页
YYKit---Image gif

YYKit---Image gif

作者: 给伤的你我依然喜欢 | 来源:发表于2017-07-03 10:26 被阅读226次

    帧动画 YYFrameImage 继承UIImage  <YYAnimatedImage>

    1.- (nullable instancetype)initWithImagePaths:(NSArray*)paths//图片路径

    oneFrameDuration:(NSTimeInterval)oneFrameDuration//每张图片播放时间

    loopCount:(NSUInteger)loopCount;//循环次数,0代表,不限次数


    2.- (nullable instancetype)initWithImagePaths:(NSArray*)paths                            frameDurations:(NSArray*)frameDurations//@[ @0.1,@0.2,@0.3];

    loopCount:(NSUInteger)loopCount;


    也可以用NSData创建

    3.- (nullable instancetype)initWithImageDataArray:(NSArray*)dataArray

    oneFrameDuration:(NSTimeInterval)oneFrameDuration

    loopCount:(NSUInteger)loopCount;

    4.- (nullable instancetype)initWithImageDataArray:(NSArray*)dataArray

    frameDurations:(NSArray *)frameDurations

    loopCount:(NSUInteger)loopCount;

    ps.只支持png and jpeg


    YYImage 继承UIImage <YYAnimatedImage>

    YYImage *image = [YYImage imageNamed:name];//这样就可以加载本地的图片和GIF ,webP的动态图


    YYSpriteSheetImage 继承UIImage  <YYAnimatedImage>


    用于截取图片,然后播放动态图。代码如下:

    CGSize size = CGSizeMake(sheet.size.width / 8, sheet.size.height / 12);//12 行8列的sheet(UIImage)

    for (int j = 0; j < 12; j++) {

    for (int i = 0; i < 8; i++) {

    CGRect rect;

    rect.size = size;

    rect.origin.x = sheet.size.width / 8 * i;

    rect.origin.y = sheet.size.height / 12 * j;

    [contentRects addObject:[NSValue valueWithCGRect:rect]];//NSValue 类型的

    [durations addObject:@(1 / 60.0)];//NSNumber 类型

    }

    }

    YYSpriteSheetImage *sprite;

    sprite = [[YYSpriteSheetImage alloc] initWithSpriteSheetImage:sheet contentRects:contentRects frameDurations:durations loopCount:0];


    YYAnimatedImageView 继承UIImageView

    - (BOOL)isAnimating; 是否在动画

    - (void)startAnimating;开始动画

    - (void)stopAnimating;停止动画 //都是UIImageView 的方法

    加载网络图片和SDWebImage 差不多

    YYKit 有一个UIImageView 和UIButton的分类 可以加载网络图片,png,等等

    - (void)setImageWithURL:(nullable NSURL *)imageURL placeholder:(nullable UIImage *)placeholder;

    想实现点击播放,点击停止,是需要给YYAnimatedImageView
     添加tap手势。判断是否正在动画,来决定开始还是停止动画。

    实现左滑右滑,前进后退。YYImage等都遵守协议.

    + (void)addPanControlToAnimatedImageView:(YYAnimatedImageView *)view {  

    if (!view) return;  //

      view.userInteractionEnabled = YES;

      __weak typeof(view) _view = view;  

    __block BOOL previousIsPlaying;    //记录滑动前是否动画

        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithActionBlock:^(id sender) {      

    UIImage*image = (id)_view.image;

    if (![image conformsToProtocol:@protocol(YYAnimatedImage)]) return;//image 是否遵守协议

    UIPanGestureRecognizer *gesture = sender;

    CGPoint p = [gesture locationInView:gesture.view];

    CGFloat progress = p.x / gesture.view.width;

    if (gesture.state == UIGestureRecognizerStateBegan) {//手势开始时,记录当前是否动画,并

    previousIsPlaying = [_view isAnimating];                                停止动画。把当前在的index赋值给

    [_view stopAnimating];                                                              View

    _view.currentAnimatedImageIndex = image.animatedImageFrameCount * progress;

    }

    else if (gesture.state == UIGestureRecognizerStateEnded ||gesture.state == UIGestureRecognizerStateCancelled) {//手势结束时,恢复原先的状态

    if (previousIsPlaying) [_view startAnimating];

    } else {//移动的时候,把当前的index服给View

    _view.currentAnimatedImageIndex = image.animatedImageFrameCount * progress;

    }

    }];

    [view addGestureRecognizer:pan];

    }

    相关文章

      网友评论

          本文标题:YYKit---Image gif

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