标签: catransform3d

如何在透视视图中围绕其中心旋转平面对象?

我想要做的似乎应该很容易:我创建了一个旧的留声机唱片的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)

catransform3d ios

30
推荐指数
1
解决办法
2万
查看次数

CATransform3D旋转导致图像的一半消失

我正在使用以下代码来旋转图像,但是已经"旋转"出页面的图像的一半(沿着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)

iphone transform calayer quartz-graphics catransform3d

20
推荐指数
2
解决办法
7520
查看次数

需要更好,更简单地理解CATransform3D

请仔细阅读图片.

初始位置 旋转后

所以这是我从一些在线资源获得的代码,它确实改变了我的对象.除此之外,我什么都不懂.我是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.请帮助处理任何文章,文档或解释自己.

非常感谢.

calayer catransform3d caanimation ios

20
推荐指数
3
解决办法
1万
查看次数

CABasicAnimation - 变换比例保持在中心

尝试在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)

core-animation core-graphics mask catransform3d ios

20
推荐指数
4
解决办法
3万
查看次数

CATransform3D的m34的含义

结构CATransform3D的m34的含义是什么,我只知道它可以改变视角,但当值为-0.001和0.001时,意义是什么?

perspective catransform3d

16
推荐指数
2
解决办法
9933
查看次数

如何使用CATransform3DRotate旋转UIImageView会产生像开门一样的效果?

我已阅读并试用这篇文章(使用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.

我的问题是:图像只能通过图像的中间垂直线旋转,但我想让它按图像的左垂直线旋转.

iphone core-animation catransform3d sliding-doors

14
推荐指数
1
解决办法
2万
查看次数

从CATransform3D获取"比例"

我正在创建一个iPad应用程序,并希望使用当前视图大小更新用户.我曾经这样做是通过计算CGAffineTransform的比例并将xScale乘以(相关视图的)宽度和yScale乘以高度来实现的.我想继续这样做,但我不再进行二维转换了,我确定用什么方程从CATransform3D中提取比例信息.

你能帮我吗?

iphone math scale catransform3d

13
推荐指数
2
解决办法
4598
查看次数

UIView垂直翻转

我知道这可能是一个虚假的问题,但我不得不问:如何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)

我认为它只会旋转一半...所以,任何想法?

多谢你们.

xcode rotation flip uiview catransform3d

13
推荐指数
1
解决办法
1万
查看次数

如何在UITableView标题上方添加具有视差效果的图像并保持标题粘滞?

这是一张图片,解释了我想做的一切:

在此输入图像描述

我的问题是,我将如何制作我的视图结构.表视图的标题应固定在表的顶部.但是在表格视图标题上方的最顶层图像呢?我是否必须在UIScrollView中添加表视图?

视差效果可以通过CATransform3D,但我如何实现我想要的,这是我的问题.有很多演示,但我想让它完成自定义.

catransform3d uiviewanimationtransition ios uiview-hierarchy swift

13
推荐指数
1
解决办法
1万
查看次数

iPhoneSDK从CATransform3D计算旋转角度

如何通过提供CATransform3D结构作为输入来计算Z轴周围的旋转?

基本上我需要的是另一种方式CATransform3DMakeRotation.

iphone core-animation catransform3d

10
推荐指数
2
解决办法
5992
查看次数