我想要做的似乎应该很容易:我创建了一个旧的留声机唱片的2D自上而下的视图.我想将它旋转(放回)在X轴上然后围绕它的Z轴旋转.
我已经阅读了身上有CATransform3D的每个问题,我读过Steve Baker的"Matrices可能是你的朋友"一文以及Bill Dudney的书"Mac OS X和iPhone的核心动画"我认为Brad Larson的"没有轨迹球的3-D旋转"具有所有正确的代码,但由于他允许用户调整所有三个轴,我很难将他的代码缩小到我认为只是一个维度(旋转的z轴) ).
这是我正在测试的图像,而不是细节对问题很重要:

我以通常的方式在屏幕上显示:(在UIView的子类中)
- (void)awakeFromNib
{
UIImage *recordImage = [UIImage imageNamed:@"3DgoldRecord"];
if (recordImage) {
recordLayer = [CALayer layer];
[recordLayer setFrame:CGRectMake(0.0, 0.0, 1024, 1024)];
[recordLayer setContents:(id)[[UIImage imageNamed:@"3DgoldRecord"] CGImage]];
[self.layer addSublayer:recordLayer];
}
}
Run Code Online (Sandbox Code Playgroud)
这是第一次测试,只是把它放在屏幕上;-)
然后,为了"放回"我应用一个变换来围绕图层的X轴旋转,在将图层的内容设置到图像之后和添加子图层之前插入此代码:
CATransform3D myRotationTransform =
CATransform3DRotate(recordLayer.transform,
(M_PI_2 * 0.85), //experiment with flatness
1.0, // rotate only across the x-axis
0.0, // no y-axis transform
0.0); // no z-axis transform
recordLayer.transform = myRotationTransform;
Run Code Online (Sandbox Code Playgroud)
这符合预期:记录正在顺利回归.
并且为了下一步,导致记录旋转,我将此动画绑定到touchesEnded事件,尽管一旦退出测试/学习阶段,此旋转将不受用户控制:
CATransform3D currentTransform = recordLayer.transform; …Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码来旋转图像,但是已经"旋转"出页面的图像的一半(沿着y轴)消失了.怎么修?heading是弧度.
CALayer *layer = myUIImageView.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / 500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, heading, 0.0f, 1.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;
Run Code Online (Sandbox Code Playgroud) 请仔细阅读图片.

所以这是我从一些在线资源获得的代码,它确实改变了我的对象.除此之外,我什么都不懂.我是CATransform3D的新手,想知道它是如何工作的.
CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0 / -500;
transform = CATransform3DRotate(transform, 45.0f * M_PI / 180.0f, 0, 1, 0.0f);
_bgView.layer.transform = transform;
Run Code Online (Sandbox Code Playgroud)
我想知道这段代码是如何运行的?为什么我们在m34中设置了一些值?我发现它的某种矩阵甚至让我更加困惑.另外,CATransform3DRotate中的参数是什么 意思?
我想了解但没有进一步.
我想深入了解CATransform3D.请帮助处理任何文章,文档或解释自己.
非常感谢.
尝试在UIView上屏蔽椭圆的动画以进行比例变换,保留在中心位置.
我发现的CALayer - CABasicAnimation不是围绕中心/ anchorPoint缩放,并随后加入一个bounds属性到maskLayer CAShapeLayer然而,这与面罩定位在只显示它的1/4左上角结束.我希望面具保持在屏幕的中心.
@synthesize maskedView;
- (void)viewDidLoad
{
[super viewDidLoad];
UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"Next"];
vc.view.frame = CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height);
vc.view.layer.bounds = self.view.layer.bounds;
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGRect maskRect = CGRectMake((self.view.frame.size.width/2)-50, (self.view.frame.size.height/2)-50, 100, 100);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddEllipseInRect(path, nil, maskRect);
[maskLayer setPath:path];
CGPathRelease(path);
vc.view.layer.mask = maskLayer;
[self.view addSubview:vc.view];
maskedView = vc.view;
[self startAnimation];
}
Run Code Online (Sandbox Code Playgroud)
动画...
-(void)startAnimation
{
maskedView.layer.mask.bounds = CGRectMake((self.view.frame.size.width/2)-50, (self.view.frame.size.height/2)-50, 100, 100);
maskedView.layer.mask.anchorPoint = CGPointMake(.5,.5);
maskedView.layer.mask.contentsGravity = …Run Code Online (Sandbox Code Playgroud) 结构CATransform3D的m34的含义是什么,我只知道它可以改变视角,但当值为-0.001和0.001时,意义是什么?
我已阅读并试用这篇文章(使用Core Animation打开门效果)
我在我的应用程序中实现以下代码:
CALayer *layer = threeHomeView.layer;
CATransform3D initialTransform = threeHomeView.layer.transform;
initialTransform.m34 = 1.0 / -900;
[UIView beginAnimations:@"Scale" context:nil];
[UIView setAnimationDuration:3];
layer.transform = initialTransform;
CATransform3D rotationAndPerspectiveTransform = threeHomeView.layer.transform;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform
, 40.0f * M_PI / 180.0f
, 0.0f
, 1.0f
, 0.0f);
layer.transform = rotationAndPerspectiveTransform;
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(threeHomeFlyOut)];
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
threeHomeView是一个UIImageView.
我的问题是:图像只能通过图像的中间垂直线旋转,但我想让它按图像的左垂直线旋转.
我正在创建一个iPad应用程序,并希望使用当前视图大小更新用户.我曾经这样做是通过计算CGAffineTransform的比例并将xScale乘以(相关视图的)宽度和yScale乘以高度来实现的.我想继续这样做,但我不再进行二维转换了,我确定用什么方程从CATransform3D中提取比例信息.
你能帮我吗?
我知道这可能是一个虚假的问题,但我不得不问:如何UIView垂直翻转?我不是要求做动画,而只是翻动它.
我可以UILabel通过以下方式进行垂直翻转:
label1.layer.transform = CATransform3DMakeRotation(M_PI, 1.0f, 0.0f, 0.0f);
并通过以下方式将其转回:
label1.layer.transform = CATransform3DMakeRotation(M_PI, 0.0f, 0.0f, 0.0f);
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时:
self.view.layer.transform = CATransform3DMakeRotation(M_PI, 1.0f, 0.0f, 0.0f);
Run Code Online (Sandbox Code Playgroud)
我认为它只会旋转一半...所以,任何想法?
多谢你们.
这是一张图片,解释了我想做的一切:

我的问题是,我将如何制作我的视图结构.表视图的标题应固定在表的顶部.但是在表格视图标题上方的最顶层图像呢?我是否必须在UIScrollView中添加表视图?
视差效果可以通过CATransform3D,但我如何实现我想要的,这是我的问题.有很多演示,但我想让它完成自定义.
catransform3d uiviewanimationtransition ios uiview-hierarchy swift
如何通过提供CATransform3D结构作为输入来计算Z轴周围的旋转?
基本上我需要的是另一种方式CATransform3DMakeRotation.
catransform3d ×10
ios ×4
iphone ×4
calayer ×2
caanimation ×1
flip ×1
mask ×1
math ×1
perspective ×1
rotation ×1
scale ×1
swift ×1
transform ×1
uiview ×1
xcode ×1