У меня есть приложение для iPhone, разработанное на XCode 4. Оно корректно работает в следующих средах:
- iPhone Simulator (iOS версия 5)
- устройство iOS 5 (выполнено)из архива)
- устройство iOS 5 (выполнено из сборки XCode)
- устройство iOS 4 (выполнено из сборки XCode)
- устройство iOS 3 (выполнено из сборки XCode)
Однако, когда я помещаю архив, работающий в iOS 5, на устройство iOS 3 или 4, это выглядит забавно.Точно такой же код прекрасно работает при запуске из XCode на том же устройстве.
Когда я говорю, что это забавно, это анимация скользящего UIView по неправильной оси.Я действительно выполняю преобразование вращения в UIView, прежде чем оживить его.Но опять же, он отлично работает при запуске напрямую из XCode, даже на устройствах iOS 3 и 4.Он работает только в архиве и только для iOS 3 и 4. Архив отлично работает в iOS 5.
Вращение выполняется статическим вызовом в классе помощника:
+ (UIImage*)rotateImage:(UIImage *)image {
CGRect bnds = CGRectZero;
UIImage* copy = nil;
CGContextRef ctxt = nil;
CGImageRef imag = image.CGImage;
CGRect rect = CGRectZero;
CGAffineTransform tran = CGAffineTransformIdentity;
rect.size.width = CGImageGetWidth(imag);
rect.size.height = CGImageGetHeight(imag);
bnds = rect;
bnds = swapWidthAndHeight(bnds);
tran = CGAffineTransformMakeTranslation(rect.size.height, 0.0);
tran = CGAffineTransformRotate(tran, M_PI / 2.0);
UIGraphicsBeginImageContext(bnds.size);
ctxt = UIGraphicsGetCurrentContext();
CGContextScaleCTM(ctxt, -1.0, 1.0);
CGContextTranslateCTM(ctxt, -rect.size.height, 0.0);
CGContextConcatCTM(ctxt, tran);
CGContextDrawImage(UIGraphicsGetCurrentContext(), rect, imag);
copy = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return copy;
}
Анимация выполняется:
// The first image should fall from top.
CGRect rect = boardView.frame;
rect.origin = CGPointMake(VIEW_IMAGE_X_POS, 0);
boardView.frame = rect;
[myView addSubview:boardView];
// The starting image comes down. Then passes control to the next animation routine for the clones.
[UIView beginAnimations:@"addStartingImage" context:boardView];
[UIView setAnimationDuration:1.2];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(startingImageDidStop:finished:context:)];
// Add the new image
rect = boardView.frame;
rect.origin = CGPointMake(VIEW_IMAGE_X_POS, myView.contentSize.height - 108);
boardView.frame = rect;
// End the animation
[UIView commitAnimations];
Все остальное работает нормально.Есть мысли?