이것은 좋은 질문이며 몇 가지 생각으로 여기에서 다룰 것입니다.
먼저 총 크기가 약 4MB 인 일련의 그래픽을로드하고 있습니다. 특히 느린 (구형) 장치의 경우에는 시간이 걸릴 수 있습니다. 당신의 .H 파일의 @interface 블록에서
사용하면 다음과 같은 두 가지 속성을 선언 할 수 있습니다 :
IBOutlet UIImageView *animationViewNormal;
NSMutableArray *animationViewNormalImages;
첫 번째 단지 모범 사례에 대한 이름이 이미 가지고있는 UIImageView (이다)이고 두 번째는 이미지 뷰의 이미지 스택을 유지할 수있는 가변 배열입니다. "정상적인"상태를 의미하는 경우 상태를 나타냅니다. 설명을 위해 다른 주에 대한 추가 이미지 세트를로드하고 있습니까?
.이 헤더에 정의 된 가변 배열 화상 스택을 야기 할 수있는 기능을 제공한다
- (void)loadAnimationImages;
다음 @interface에서 m 파일은 다음과 같은 방법으로 생성한다. 당신은 내가 normal_ % 03u_crop에 normalCrop % 03u에서로 PNG 파일을 이름에서 볼 수 있듯이
- (void)loadAnimationImages {
for (NSUInteger i = 0; i < 23; i++) {
NSString *imageName = [NSString stringWithFormat:@"normalCrop%03u", i];
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageName ofType:@"png"]];
if (image) {
[animationViewNormalImages addObject:image];
}
}
}
: 다음 원하는거야 @implementation에서 같은 하는 .m 파일에서
파일 이름의 끝 부분에 색인 레이블을 두는 것이 가장 좋습니다 (대부분의 응용 프로그램은이 방법으로 내용을 출력합니다). 루프는 이미지를로드하고 이미지인지 확인한 다음 변경 가능한 배열의 "이미지 스택"에 이미지를 추가합니다. 초기화에서
는() 다음이 필요합니다
- (id)init {
...
animationViewNormalImages = [[NSMutableArray alloc] init];
...
}
이 이미지보기를 된 이미지의 스택을 유지하기 위해 (animationViewNormalImages) 변경 가능한 배열을 할당합니다.
우리는 지금 viewDidLoad에 대한 코드로 이동합니다() :
- (void)viewDidLoad {
[super viewDidLoad];
...
[self loadAnimationImages];
[animationViewNormal setAnimationImages:animationViewNormalImages];
[animationViewNormal setAnimationDuration:1.1f];
[animationViewNormal setAnimationRepeatCount:0]; // 0=infinite loop
...
}
우리는 가변 배열로 이미지의 스택을로드 후, 이미지 스택과 함께 우리의 이미지 뷰의 속성을 설정 기간 및 반복 횟수.) 이미지 뷰 우리가 viewWillDisappear의 뷰 (떠날 때 처리 할 필요가 무한 루프로 애니메이션되면
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
...
[animationViewNormal startAnimating];
...
}
다음 viewDidAppear에
다음() 우리가 이미지보기에 애니메이션을 시작 :
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
...
[animationViewNormal stopAnimating];
...
}
마지막으로 변경할 수 ARRA에서 우리가 정리 (우리가 하는 .m 파일을 추가 두 번째 일이 될해야하는) 의 dealloc (에서 Y)는 :
- (void)dealloc {
...
[animationViewNormalImages release];
[super dealloc];
}
이것은 우리가 그것을 처리하는 방법이며, 우리를 위해 작동하지만, 다시, 우리가 일반적으로 메모리에 이미지 4MB의를로드하지 않는 것은 애니메이션.
.PNG 파일은 응용 프로그램을 빌드 할 때 압축되며 리소스 번들의 이미지를로드 할 때 즉시 압축이 해제되는지 확실하지 않습니다. 이는 빌드 특성 빌드 설정 (COMPRESS_PNG_FILES)의 부울 값입니다.
성능을 위해 다음과 같은 고려할 수 있습니다 : 내용 불투명 한 부분 투명 합성 한 것보다 훨씬 적은 노력을 필요로하는보기를 합성 :
- 마크 불투명 등의 전망을 제공합니다.보기를 불투명하게 만들려면 보기 내용에 의 투명도가 포함되어 있지 않아야하며보기의 불투명 속성은
이 YES로 설정되어야합니다. 불투명 PNG 파일에서
- 제거 알파 채널 : PNG 이미지 의 모든 픽셀이 불투명 한 경우, 알파 채널을 제거하는 해당 이미지가 포함 된 레이어를 혼합 할 필요를 피할 수 있습니다. 이 은 이미지 의 합성을 간소화하고 드로잉을 향상시키기 위해 성능을 향상시킵니다.
또한 24 개의 프레임 모두 (개별 프레임의 너비만큼 오프셋)로 만든 큰 이미지를 한 번로드하는 것이 좋습니다. 그런 다음 Core Graphics를 CGContextClipToRect으로 사용하면 이미지 컨텍스트가 오프셋됩니다. 이는 더 많은 코드를 의미하지만 표준 스택 방법을 사용하는 것보다 빠를 수 있습니다.
마지막으로, .PNG 파일을 .PVR (PVRTC) 파일로 변환하는 것이 좋습니다. 자세한 내용은 Apple Tech QA, Apple Docs 및 Sample Code입니다.
이 정보가 도움이 되었으면 투표 해주세요.
최저
, 케빈 가능 배 소프트웨어
와우 케빈! 이 모든 것을 쓸 시간을내어 주셔서 감사합니다. 아직 모든 것을 소화하지는 않았지만 그것을 아주 조심스럽게 읽을 것입니다. 다시 한 번 감사드립니다. 이것이 바로 소프트웨어 개발자 커뮤니티가 지향하는 것입니다! – user422808