YYImage의 YYFrameImage
- (instancetype)initWithImagePaths:(NSArray *)paths frameDurations:(NSArray *)frameDurations loopCount:(NSUInteger)loopCount
- (instancetype)initWithImageDataArray:(NSArray *)dataArray frameDurations:(NSArray *)frameDurations loopCount:(NSUInteger)loopCount
구조가 간단하고 한 조의 그림의 path나 데이터로 여러 개의 그림을 봉하여 YYAnimatedImageView에서 재생하는 목적을 달성한다.
내부에서도 몇 개의 구성원 변수를 유지했다
NSUInteger _loopCount;
NSUInteger _oneFrameBytes;
NSArray *_imagePaths;
NSArray *_imageDatas;
NSArray *_frameDurations;
각각 순환 횟수, 여러 개의 그림 path 또는 여러 개의 그림 데이터, 그리고 매 프레임의 재생 시간의 수조입니다.
YYAnimatedImageView에서 재생하기 위해서는 YYAnimatedImage 프로토콜이 필요합니다. 여러 그림이 어떻게 조합되는지 살펴보겠습니다.
먼저 YYAnimatedImageView에서 재생할 수 있는 프레임의 개수를 알려줍니다.
- (NSUInteger)animatedImageFrameCount {
if (_imagePaths) {
return _imagePaths.count;
} else if (_imageDatas) {
return _imageDatas.count;
} else {
return 1;
}
}
이후 순환 횟수 제공
- (NSUInteger)animatedImageLoopCount {
return _loopCount;
}
그림의 최적화를 위해 각 프레임의 크기를 제공합니다
- (NSUInteger)animatedImageBytesPerFrame {
return _oneFrameBytes;
}
매 프레임의 그림을 되돌려줍니다
- (UIImage *)animatedImageFrameAtIndex:(NSUInteger)index {
if (_imagePaths) {
if (index >= _imagePaths.count) return nil;
NSString *path = _imagePaths[index];
CGFloat scale = _NSStringPathScale(path);
NSData *data = [NSData dataWithContentsOfFile:path];
return [[UIImage imageWithData:data scale:scale] yy_imageByDecoded];
} else if (_imageDatas) {
if (index >= _imageDatas.count) return nil;
NSData *data = _imageDatas[index];
return [[UIImage imageWithData:data scale:[UIScreen mainScreen].scale] yy_imageByDecoded];
} else {
return index == 0 ? self : nil;
}
}
프레임당 표시 시간 제공
- (NSTimeInterval)animatedImageDurationAtIndex:(NSUInteger)index {
if (index >= _frameDurations.count) return 0;
NSNumber *num = _frameDurations[index];
return [num doubleValue];
}
자, 프레임 이미지 구현은 비교적 간단하고 코드도 뚜렷하고 알기 쉽습니다.더 많은 디테일은 스스로 발굴할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.