Предварительная загрузка анимации UIImageView с использованием цели c для iphone - PullRequest
1 голос
/ 12 апреля 2011

У меня есть анимированное изображение, которое прекрасно работает.Он состоит из 180 изображений высокого качества, воспроизводится нормально и непрерывно воспроизводится.Моя проблема в том, что при первой загрузке представления, содержащего эти изображения, загрузка занимает много времени.Каждый следующий раз после этого он загружается немедленно, так как я предполагаю, что изображения были кэшированы или предварительно загружены !!!Я пришел из прошлого, и, как я уверен, вы знаете, что preloaders так же распространены, как и гадость, поэтому я не чувствую, что это должно быть трудно найти, но после бесчисленного поиска в Интернете я не могу найти хороших примеров предварительной загрузки или каких-либо статей о том, почемузадержка и что с этим делать.

Итак, мой вопрос (ы):

  1. Есть ли флажок в info.plist для предварительной загрузки всех моих изображений в начале приложения?

  2. Как вы можете предварительно загрузить изображения, и есть ли какие-нибудь простые примеры проектов, на которые я мог бы посмотреть?

  3. Это лучший способ реализовать то, что по сутивидео, но было выведено в последовательность png?

  4. Есть ли другой метод, так как viewDidLoad не работает, как я ожидаю.Он отслеживает «ЗАВЕРШЕННЫЕ ИЗОБРАЖЕНИЯ ЗАГРУЗКИ» (см. Код ниже), но представление не отображается в течение одной или двух секунд после загрузки изображений, поэтому, если представление не отображается до тех пор, пока изображения не загружены, то и UIActivityIndicatorView, который также находится вта же точка зрения.

  5. Как вы выполняете прослушивание событий в цели c?

Ниже приведен код в viewDidLoad, который я считаю довольно стандартным:

Любая помощь очень ценится, так как я бьюсь головой об кирпичную стену о чем-то, что кажется таким базовым в разработке пользовательского интерфейса.Справка:)

- (void)viewDidLoad {
    [super viewDidLoad];

    imageArray = [[NSMutableArray alloc] initWithCapacity:IMAGE_COUNT];

    NSLog(@"START LOADING IMAGES");

    // Build array of images, cycling through image names
    for (int i = 0; i < IMAGE_COUNT; i++){
        [imageArray addObject:[UIImage imageNamed: [NSString stringWithFormat:@"Main_%d.png", i]]];
    }

    animatedImages = [[UIImageView alloc] initWithFrame:CGRectMake(0,20,IMAGE_WIDTH, IMAGE_HEIGHT)];
    animatedImages.animationImages = [NSArray arrayWithArray:imageArray];
    animatedImages.animationDuration = 6.0;
    animatedImages.animationRepeatCount = 0;    
    [self.view addSubview:animatedImages];
    animatedImages.startAnimating;
    [animatedImages release];

    NSLog(@"FINISH LOADING IMAGES");

} 

Ура

M

Ответы [ 2 ]

7 голосов
/ 13 апреля 2012

В случае, если кто-то найдет этот вопрос, у меня есть ответ, который заключается в предварительной визуализации изображений следующим образом.

NSMutableArray *menuanimationImages = [[NSMutableArray alloc] init];

for (int aniCount = 1; aniCount < 21; aniCount++) {
    NSString *fileLocation = [[NSBundle mainBundle] pathForResource: [NSString stringWithFormat: @"bg%i", aniCount + 1] ofType: @"png"];

    // here is the code to load and pre-render the image
    UIImage *frameImage = [UIImage imageWithContentsOfFile: fileLocation];
    UIGraphicsBeginImageContext(frameImage.size);
    CGRect rect = CGRectMake(0, 0, frameImage.size.width, frameImage.size.height);
    [frameImage drawInRect:rect];
    UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    // then add the resulting image to the array
    [menuanimationImages addObject:renderedImage];
}

settingsBackground.animationImages = menuanimationImages;

Я пробовал несколько других методов предварительной загрузки изображений, и этоединственное, что я нашел, это работает.

0 голосов
/ 12 апреля 2011
My problem is that the first time I load the view containing these images it takes a long time to load. Every subsequent time after that it loads immediately as I am assuming that the images have been cached or preloaded

вы правы на данный момент ...... так как вы используете метод imageNamed: для этого метода кавычки документа .....

This method looks in the system caches for an image object with the specified name and returns that object if it exists. If a matching image object is not already in the cache, this method loads the image data from the specified file, caches it, and then returns the resulting object.

так что, на мой взгляд, вместо того, чтобы делать следующие вещи в viewDidLoad, вы должны делать это раньше, когда задержка невелика ......

    for (int i = 0; i < IMAGE_COUNT; i++)
    { 
    [imageArray addObject:[UIImage imageNamed: [NSString stringWithFormat:@"Main_%d.png", i]]]; 
}

другой подход

- (void)spinLayer:(CALayer *)inLayer duration:(CFTimeInterval)inDuration
        direction:(int)direction
{
    CABasicAnimation* rotationAnimation;

    // Rotate about the z axis
    rotationAnimation = 
    [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

    // Rotate 360 degress, in direction specified
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 * direction];

    // Perform the rotation over this many seconds
    rotationAnimation.duration = inDuration;
    rotationAnimation.repeatCount = 100;
    //rotationAnimation.

    // Set the pacing of the animation
    //rotationAnimation.timingFunction = 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    // Add animation to the layer and make it so
    [inLayer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}

этот метод поможет в анимации вызвать его следующим образом (я предполагаю, что вы помещаете вышеуказанный метод в тот же класс, где у вас есть imageView.

[self spinLayer:yourImageView.layer duration:5.0
            direction:<-1 or 1 for anti clockwise or clockwise spin>];

помните, просто установите только одно изображение для этого imageView (которое вы хотите оживить. спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...