Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 三维立方体问题,第2部分_Iphone_Objective C_Core Animation_Calayer_Cube - Fatal编程技术网

Iphone 三维立方体问题,第2部分

Iphone 三维立方体问题,第2部分,iphone,objective-c,core-animation,calayer,cube,Iphone,Objective C,Core Animation,Calayer,Cube,这是我关于iphone中3D立方体的第二个问题,使用CALayer,核心动画框架,用Objective-c编写。关于我的第一个问题,请访问这里 我正在使用Brad Larsons代码从此链接旋转我的3D立方体 问题是我的立方体在x轴上沿着图中所示的粉色线旋转 但是我想沿着图中所示的黑线绕x轴旋转它。 现在在我的代码中,我没有在我的视图上画任何粉线或黑线,所以请有人帮我解决这个问题 如果有帮助,下面是在touchsmoved:method中旋转多维数据集的代码 - (void)touchesM

这是我关于iphone中3D立方体的第二个问题,使用CALayer,核心动画框架,用Objective-c编写。关于我的第一个问题,请访问这里

我正在使用Brad Larsons代码从此链接旋转我的3D立方体

问题是我的立方体在x轴上沿着图中所示的粉色线旋转

但是我想沿着图中所示的黑线绕x轴旋转它。
现在在我的代码中,我没有在我的视图上画任何粉线或黑线,所以请有人帮我解决这个问题

如果有帮助,下面是在
touchsmoved:
method中旋转多维数据集的代码

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    CGPoint location = [[touches anyObject] locationInView:self];
    CATransform3D currentTransform = currentLayer.sublayerTransform;
    CGFloat displacementInX = location.x - previousLocation.x;
    CGFloat displacementInY = previousLocation.y - location.y;
    CGFloat totalRotation = sqrt(displacementInX * displacementInX + displacementInY * displacementInY);
    CGFloat x = (displacementInX/totalRotation) * currentTransform.m12 + (displacementInY/totalRotation) * currentTransform.m11;
    CATransform3D rotationalTransform = CATransform3DRotate(currentTransform, totalRotation * M_PI / 180.0, x, y, 0);
    currentLayer.sublayerTransform = rotationalTransform;
}
previousLocation是一个在
touchsbegind:
方法中初始化的
CGPoint
,currentLayer是我创建此多维数据集的
CALayer

谢谢你的帮助


注:如果您想知道我是如何创建这个立方体的,请告诉我

将andchorPoint设置为中心;如果是和一个菜鸟打交道的话

[myLayer setAnchorPoint:CGPointMake(0.5, 0.5)];

看起来您需要先平移层,然后再旋转层

您可以先使用CATTransferorM3dTranslate将层从其自然原点移开,然后再使用CATTransferorM3dRotate,而不是拾取轴/锚点


看看您是如何构建多维数据集的,以确定它是如何实现的,这会有所帮助。

没有人会沿着图中的那条粉色线旋转。我很想知道您是如何创建多维数据集的。我正试图对你做类似的事情。到目前为止有什么进展吗?我已经完成了这个项目,但我想我可以给你一个在石英核心中制作立方体的代码。嘿,我得到了一个非常类似的代码,在3D中旋转
CALayer
,等等,但是我按照Simon Lee的建议,通过改变
主播点来解决了这个问题。你一定是做错了什么。请分享层结构代码,我会解决它。。。或者,如果需要的话,我可以做我自己的立方体。那不是真的,我已经试过了,结果还是一样的。也许我还遗漏了一些东西。那么,你是要分享代码,还是我应该构建一个3D立方体并旋转它?让我试试,然后在这一次给你回复。嘿,这确实奏效了,谢谢你的帮助。不知道会这么简单。谢谢