0

デフォルトの画像で PFImageView を作成しています。次に、バックグラウンドで画像をロードしています。サーバーからの画像のダウンロードが完了すると、すぐに表示され、プレースホルダー/デフォルトの画像が置き換えられます。問題は、デフォルトからダウンロードしたイメージへの移行があまり快適ではないことです。デフォルトからフェードアウトして、ダウンロードしたアニメーションにフェードインする方法はありますか?

これが私のコードです。

// set the pfImageView into the webView
_pfImageView = [[PFImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"%dpTall.jpg", [self.drink.glassId intValue]]]];
_pfImageView.frame = CGRectMake(244, 0, 76, 114);
[webView.scrollView addSubview:_pfImageView];

// create a query for finding images on Parse
PFQuery *query = [PFQuery queryWithClassName:@"Images"];
[query whereKey:@"drinkId" equalTo:[NSNumber numberWithInt:self.drink.primaryKey]];

    [query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {

    if (!error) {
        PFFile *imageFile = [object objectForKey:@"image"];
        _pfImageView.file = imageFile;
        [_pfImageView loadInBackground];

    } else {
        NSLog(@"PFQuery Error:%@", [error localizedDescription]);
    }
}];

ありがとう

4

2 に答える 2

3

画像が表示されるたびにクロスフェードアニメーションを取得するために、PFImageView にカテゴリがありました。

@implementation PFImageView (Utility)

// Add a fade animation to images
-(void) setImage:(UIImage *)image {
    if ([self.layer animationForKey:KEY_FADE_ANIMATION] == nil) {
        CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"];
        crossFade.duration = 0.6;
        crossFade.fromValue  = (__bridge id)(self.image.CGImage);
        crossFade.toValue = (__bridge id)(image.CGImage);
        crossFade.removedOnCompletion = NO;
        [self.layer addAnimation:crossFade forKey:KEY_FADE_ANIMATION];
    }

    [super setImage:image];
}

@end

アニメーションが初めて発生するように、プレースホルダー画像が必要です。

于 2014-02-12T09:59:54.400 に答える