当前位置: 首页 > 面试题库 >

为CGAffineTransformMakeRotation Swift设置旋转点

濮阳烨然
2023-03-14
问题内容

我正在使用下面的代码将UIImageViews旋转到不同的角度。

self.imageOne.transform = CGAffineTransformMakeRotation(CGFloat(-rotation))
self.imageTwo.transform = CGAffineTransformMakeRotation(CGFloat(-rotation-0.1))
self.imageThree.transform = CGAffineTransformMakeRotation(CGFloat(-change+0.1))

有什么方法可以使图像从顶部而不是中间旋转?
我想避免涉及Sprite,因为我从未使用过Sprite,也不知道如何使Sprite在单个视图应用程序中工作。谢谢你的时间。


问题答案:

您正在寻找的是视图图层的anchorPoint属性。此属性基本上表示在视图四处移动时使用的
句柄

它默认为视图的中心,这就是为什么总是看到视图从中间旋转的原因。

您可以使用我在此处找到的一种很棒的方法将您的视图的anchorPoint更改为顶部(使用CGPointMake(0,0.5f))

// Swift version
// Place this before you set the transform property
setAnchorPoint(CGPointMake(0, 0.5), view: imageOne)
setAnchorPoint(CGPointMake(0, 0.5), view: imageTwo)
setAnchorPoint(CGPointMake(0, 0.5), view: imageThree)

func setAnchorPoint(anchorPoint: CGPoint, view: UIView) {
    var newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, view.bounds.size.height * anchorPoint.y)
    var oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, view.bounds.size.height * view.layer.anchorPoint.y)

    newPoint = CGPointApplyAffineTransform(newPoint, view.transform)
    oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform)

    var position : CGPoint = view.layer.position

    position.x -= oldPoint.x
    position.x += newPoint.x;

    position.y -= oldPoint.y;
    position.y += newPoint.y;

    view.layer.position = position;
    view.layer.anchorPoint = anchorPoint;
}

这是同一代码的目标C版本

// Obj-c version
// Place this before you set the transform property
[self setAnchorPoint:CGPointMake(0, 0.5f) forView:imageOne];
[self setAnchorPoint:CGPointMake(0, 0.5f) forView:imageTwo];
[self setAnchorPoint:CGPointMake(0, 0.5f) forView:imageThree];

-(void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view
{
    CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x,
                                   view.bounds.size.height * anchorPoint.y);
    CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x,
                                   view.bounds.size.height * view.layer.anchorPoint.y);

    newPoint = CGPointApplyAffineTransform(newPoint, view.transform);
    oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform);

    CGPoint position = view.layer.position;

    position.x -= oldPoint.x;
    position.x += newPoint.x;

    position.y -= oldPoint.y;
    position.y += newPoint.y;

    view.layer.position = position;
    view.layer.anchorPoint = anchorPoint;
}

鼓励您在了解了anchorPoint属性表示的内容后,尝试自己理解这段代码的作用。



 类似资料:
  • 所以我在图像视图上做了一些旋转和翻译。据我所知,图像视图并没有真正在任何一个位置之后,你必须在动画完成后将其实际移动到那里。所以我尝试移动的图像视图称为标记,它设置在其原始位置和有它的起始位置。移动或翻译后,我调用来处理移动或旋转。这似乎有一半的时间完成了预期的结果...不确定我做错了什么,但它与我想要的方式不一致。

  • OpenGL总是围绕(0,0,0)旋转。但是我需要绕着相机旋转。我知道在GL中,没有相机,但是如果我翻译回(0,0,-6.0),它会绕着(0,0,0)旋转,而不是绕着(0,0,-6.0)旋转 所以我的问题是:如何在opengl和c中设置旋转中心 我已经找到了这篇文章:OpenGL围绕一个点旋转相机 显示此解决方案的地方: 旋转函数通常围绕原点旋转。要围绕另一个点P旋转,必须:平移(-P)旋转平移(

  • 我有一个旋转器,我想在这个上面设置一个键和一个值,我使用HashMap,这是工作,但显示一行,如下所示: 代码:

  • > 我有一个齿轮图像,我想围绕一个固定点连续旋转。 早些时候,我通过将图像作为ImageView包含在Android类中并对其应用RotateAnimation来实现这一点。 基本上,我将ImageView注入到类中并应用旋转动画。 但是,我再也不能奢侈地使用ImageView了。我必须使用位图并在画布上旋转它。 如何使用位图在画布上连续围绕一个固定点旋转来完成前面在onDraw()方法中所做的工

  • 我正在捕获图像并设置为图像视图。对我来说很管用。但问题是,当我将图像设置为ImageView时,它会被旋转。感谢任何帮助。

  • 问题内容: 所以我一直在使用: 使我的HTML内容可以在iPhone上很好地显示。在用户将设备旋转到横向模式之前,它一直很好用,在该模式下,显示始终限制为320px。 是否有一种简单的方法来指定根据用户更改设备方向而更改的视口?还是我必须借助Javascript来解决这个问题? 问题答案: 我只是想自己解决这个问题,而我想到的解决方案是: 无论它的方向如何,这似乎都将设备锁定为1.0比例。副作用是