gpt4 book ai didi

iphone - 3D 旋转中的透视问题

转载 作者:可可西里 更新时间:2023-11-01 04:02:41 24 4
gpt4 key购买 nike

我想实现这样的目标:

enter image description here

这是我的 View Controller 的快照

我试过的代码是这样的:

    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];
}

代码工作正常,只是看起来旋转是从不同的角度显示的,因为动画后的快照是这样的:

enter image description here

我错过了什么?

最佳答案

一种解决方法是您可以使用两张图片,一张用于上半部分,一张用于下半部分。您可以将两个图像拼接在一起,这样就看不到缝隙了,您可以获得所需的输出。

将属性设置为一个正值和一个负值,表示上图和下图,反之亦然。您可以获得所需结果的两个图像。然后你可以设置框架使它们粘在一起,使它们看起来像一个图像。

属性::rotationAndPerspectiveTransform.m34 = 1.0/600.0;

属性::rotationAndPerspectiveTransform.m34 = -1.0/600.0;

您可能需要进行一些尝试。

关于iphone - 3D 旋转中的透视问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17739224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com