Вы делаете это правильно, но вы делаете это неправильно.
Правильный путь не изменился в QTKit. Ваша ошибка в том, что вы пытаетесь добавить изображение до того, как закончите, что происходит, когда вы разблокируете фокус. Поскольку вы не разблокируете фокус до тех пор, пока не попытаетесь добавить изображение (20 раз), вы пытаетесь добавить незаконченное изображение (20 раз), что не работает.
Исключение «вне границ» связано с тем, что изображение не имеет представлений. QTMovie, похоже, пытается перебрать массив, возвращенный изображением в ответ на сообщение representations
, но этот массив пуст, потому что изображение не закончено.
Каким-то образом вам это сошло с рук в Leopard (возможно, из-за деталей реализации, которые изменились в Snow Leopard), но я бы сказал, что это была не менее ваша ошибка, чем тогда.
Решение состоит в том, чтобы просто заблокировать фокус и разблокировать фокус на изображении каждый раз через цикл:
float blendValue;
for (blendValue = 0.0; blendValue <= 1.0; blendValue += 0.05) {
[anImage lockFocus];
[[NSGraphicsContext currentContext] setShouldAntialias:NO];
[[[NSColor blueColor] blendedColorWithFraction:blendValue ofColor:[NSColor redColor]] setFill];
[NSBezierPath fillRect:NSMakeRect(0, 0, frameSize, frameSize)];
[anImage unlockFocus];
[mMovie addImage:anImage forDuration:duration withAttributes:myDict];
}