update
This commit is contained in:
+104
@@ -0,0 +1,104 @@
|
||||
//
|
||||
// YYSpriteImage.h
|
||||
// YYImage <https://github.com/ibireme/YYImage>
|
||||
//
|
||||
// Created by ibireme on 15/4/21.
|
||||
// Copyright (c) 2015 ibireme.
|
||||
//
|
||||
// This source code is licensed under the MIT-style license found in the
|
||||
// LICENSE file in the root directory of this source tree.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#if __has_include(<YYImage/YYImage.h>)
|
||||
#import <YYImage/YYAnimatedImageView.h>
|
||||
#elif __has_include(<YYWebImage/YYImage.h>)
|
||||
#import <YYWebImage/YYAnimatedImageView.h>
|
||||
#else
|
||||
#import "YYAnimatedImageView.h"
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/**
|
||||
An image to display sprite sheet animation.
|
||||
|
||||
@discussion It is a fully compatible `UIImage` subclass.
|
||||
The animation can be played by YYAnimatedImageView.
|
||||
|
||||
Sample Code:
|
||||
|
||||
// 8 * 12 sprites in a single sheet image
|
||||
UIImage *spriteSheet = [UIImage imageNamed:@"sprite-sheet"];
|
||||
NSMutableArray *contentRects = [NSMutableArray new];
|
||||
NSMutableArray *durations = [NSMutableArray new];
|
||||
for (int j = 0; j < 12; j++) {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
CGRect rect;
|
||||
rect.size = CGSizeMake(img.size.width / 8, img.size.height / 12);
|
||||
rect.origin.x = img.size.width / 8 * i;
|
||||
rect.origin.y = img.size.height / 12 * j;
|
||||
[contentRects addObject:[NSValue valueWithCGRect:rect]];
|
||||
[durations addObject:@(1 / 60.0)];
|
||||
}
|
||||
}
|
||||
YYSpriteSheetImage *sprite;
|
||||
sprite = [[YYSpriteSheetImage alloc] initWithSpriteSheetImage:img
|
||||
contentRects:contentRects
|
||||
frameDurations:durations
|
||||
loopCount:0];
|
||||
YYAnimatedImageView *imgView = [YYAnimatedImageView new];
|
||||
imgView.size = CGSizeMake(img.size.width / 8, img.size.height / 12);
|
||||
imgView.image = sprite;
|
||||
|
||||
|
||||
|
||||
@discussion It can also be used to display single frame in sprite sheet image.
|
||||
Sample Code:
|
||||
|
||||
YYSpriteSheetImage *sheet = ...;
|
||||
UIImageView *imageView = ...;
|
||||
imageView.image = sheet;
|
||||
imageView.layer.contentsRect = [sheet contentsRectForCALayerAtIndex:6];
|
||||
|
||||
*/
|
||||
@interface YYSpriteSheetImage : UIImage <YYAnimatedImage>
|
||||
|
||||
/**
|
||||
Creates and returns an image object.
|
||||
|
||||
@param image The sprite sheet image (contains all frames).
|
||||
|
||||
@param contentRects The sprite sheet image frame rects in the image coordinates.
|
||||
The rectangle should not outside the image's bounds. The objects in this array
|
||||
should be created with [NSValue valueWithCGRect:].
|
||||
|
||||
@param frameDurations The sprite sheet image frame's durations in seconds.
|
||||
The objects in this array should be NSNumber.
|
||||
|
||||
@param loopCount Animation loop count, 0 means infinite looping.
|
||||
|
||||
@return An image object, or nil if an error occurs.
|
||||
*/
|
||||
- (nullable instancetype)initWithSpriteSheetImage:(UIImage *)image
|
||||
contentRects:(NSArray<NSValue *> *)contentRects
|
||||
frameDurations:(NSArray<NSNumber *> *)frameDurations
|
||||
loopCount:(NSUInteger)loopCount;
|
||||
|
||||
@property (nonatomic, readonly) NSArray<NSValue *> *contentRects;
|
||||
@property (nonatomic, readonly) NSArray<NSValue *> *frameDurations;
|
||||
@property (nonatomic, readonly) NSUInteger loopCount;
|
||||
|
||||
/**
|
||||
Get the contents rect for CALayer.
|
||||
See "contentsRect" property in CALayer for more information.
|
||||
|
||||
@param index Index of frame.
|
||||
@return Contents Rect.
|
||||
*/
|
||||
- (CGRect)contentsRectForCALayerAtIndex:(NSUInteger)index;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
Reference in New Issue
Block a user