Вы также можете упаковать функцию появления в подклассе, чтобы затем использовать ее как общий UIImageView, как в следующем примере:
IMMFadeImageView *fiv=[[IMMFadeImageView alloc] initWithFrame:CGRectMake(10, 10, 50, 50)];
[self.view addSubview:fiv];
fiv.image=[UIImage imageNamed:@"initialImage.png"];
fiv.image=[UIImage imageNamed:@"fadeinImage.png"]; // fades in
Возможная реализация приведена ниже.
Примечание: способ, которым вы на самом деле реализуете постепенное появление в функции setImage:
, может измениться и может стать одним из других превосходных примеров, описанных в других ответах на этот вопрос - создание дополнительного -fly UIImageView
, как я делаю здесь, может быть неприемлемым в вашей конкретной ситуации .
IMMFadeImageView.h :
#import <UIKit/UIKit.h>
@interface IMMFadeImageView : UIImageView
@property (nonatomic,assign) float fadeDuration;
@end
IMMFadeImageView.m :
#import "IMMFadeImageView.h"
@implementation IMMFadeImageView
@synthesize fadeDuration;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.fadeDuration=1;
}
return self;
}
-(void)setImage:(UIImage *)newImage{
if(!self.image||self.fadeDuration<=0){
super.image=newImage;
} else {
UIImageView *iv=[[UIImageView alloc] initWithFrame:self.bounds];
iv.contentMode=self.contentMode;
iv.image=super.image;
iv.alpha=1;
[self addSubview:iv];
super.image=newImage;
[UIView animateWithDuration:self.fadeDuration delay:0 options:UIViewAnimationCurveEaseInOut animations:^{
iv.alpha=0;
} completion:^(BOOL finished) {
[iv removeFromSuperview];
}];
}
}
Приведенный выше код опирается на несколько предположений (включая включение ARC в вашем проекте XCode), он предназначен только для подтверждения концепции, а в интересах ясности и направленности остается актуальным, исключая важные не связанные код. Пожалуйста, не копируйте и не вставляйте это вслепую.