Я хочу, чтобы достичь чего-то вроде этого:Perspective проблема в 3D Rotation
Какой снимок моей точки зрения контроллера
Код Я попытался, как это:
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
// Take a snapshot
//
_screenshotView = [[UIImageView alloc] initWithFrame:CGRectNull];
_screenshotView.image = [self getScreenSnapshot];
_screenshotView.frame = CGRectMake(-160, -284, _screenshotView.image.size.width, _screenshotView.image.size.height);
_screenshotView.userInteractionEnabled = YES;
_screenshotView.layer.anchorPoint = CGPointMake(0, 0);
_originalSize = _screenshotView.frame.size;
[window addSubview:_screenshotView];
[self minimizeFromRect:CGRectMake(0, 0, _originalSize.width, _originalSize.height)];
- (void)minimizeFromRect:(CGRect)rect
{
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
CGFloat m = 0.7;
CGFloat newWidth = _originalSize.width * m;
CGFloat newHeight = _originalSize.height * m;
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:0.6] forKey:kCATransactionAnimationDuration];
[self addAnimation:@"position.x" view:_screenshotView startValue:rect.origin.x endValue:window.frame.size.width - 80.0];
[self addAnimation:@"position.y" view:_screenshotView startValue:rect.origin.y endValue:(window.frame.size.height - newHeight)/2.0];
[self addAnimation:@"bounds.size.width" view:_screenshotView startValue:rect.size.width endValue:newWidth];
[self addAnimation:@"bounds.size.height" view:_screenshotView startValue:rect.size.height endValue:newHeight];
_screenshotView.layer.position = CGPointMake(window.frame.size.width - 80.0, (window.frame.size.height - newHeight)/2.0);
_screenshotView.layer.bounds = CGRectMake(window.frame.size.width - 80.0, (window.frame.size.height - newHeight)/2.0, newWidth, newHeight);
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0/-600;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, -20.0f * M_PI/180.0f, 0.0f, 1.0f, 0.0f);
_screenshotView.layer.transform = rotationAndPerspectiveTransform;
[CATransaction commit];
}
Код работает отлично, за исключением того, что похоже, что поворот показан с другой точки зрения, потому что моментальный снимок после анимации оказывается таким, как это :
Что мне не хватает?
Почему бы не сделать это правильно? – Firdous
Чтобы сделать это сразу, вам нужно сделать поворот более чем на двух плоскостях. Для примера - In Y и Z. И вам нужно проверить и сделать это правильно, установив разные углы. То, что вы делаете, только от оси Y. – NiKKi
не могу получить то, что вам нравится, но Ive уже решил его, применив анимацию непосредственно к объекту CALayer, см. Отмеченный ответ – Firdous