当前位置: 首页 > 知识库问答 >
问题:

围绕不同的锚点和位置旋转会使图像首先跳转到新位置

孔阎宝
2023-03-14

我在视图上做旋转动画,希望它围绕视图的中心X和底部Y旋转。我更改层的锚点和位置,然后运行动画。这是我的代码:

- (void)viewDidLoad {
  [super viewDidLoad];
  _imageView = [UIImageView newAutoLayoutView];
  _imageView.image = [PCImage imageNamed:@"Umbrella"];
  [self.view addSubview:_imageView];
  [_imageView autoAlignAxisToSuperviewAxis:ALAxisVertical];
  [_imageView autoPinEdgeToSuperviewEdge:ALEdgeBottom];
}

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];

  CGPoint newPosition = CGPointMake(CGRectGetMidX(_imageView.frame), CGRectGetMaxY(_imageView.frame));
  NSLog(@"frame %@, new position %@", NSStringFromCGRect(_imageView.frame), NSStringFromCGPoint(newPosition));

  _imageView.layer.anchorPoint = CGPointMake(.5, 1.0);
  _imageView.layer.position = newPosition;


  [UIView animateKeyframesWithDuration:2.0 delay:2.0 options:UIViewKeyframeAnimationOptionCalculationModeLinear | UIViewKeyframeAnimationOptionAutoreverse | UIViewKeyframeAnimationOptionRepeat animations:^{
    [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:.1 animations:^{
      _imageView.transform = CGAffineTransformMakeRotation(M_PI / 64);
    }];
  } completion:nil];
}

编辑

旋转正在工作,但是视图首先向上“跳转”到一个新位置,视图的底部现在是视图第一次布局时中心Y的位置。我认为更改anchorPoint并更新位置可以防止跳转。视图固定在超级视图的底部边缘,中心X固定在超级视图的中心X,如果这可能很重要的话。有什么想法吗?

编辑2

我已经阅读了其他类似的好帖子,但我一定错过了什么...

以顶部中心作为定位点缩放UIView?

共有1个答案

隆飞驰
2023-03-14

在阅读了这篇文章后,我最终改变了视图以不使用autolayout:

使用自动布局时调整CALayer的定位点

看起来变换和自动布局的设计并不能很好地协同工作。

_imageView = [UIImageView new];
_imageView.image = [PCImage imageNamed:@"Umbrella"];
_imageView.frame = CGRectMake(0, kScreenHeight - _imageView.image.size.height, _imageView.image.size.width, _imageView.image.size.height);
[self.view addSubview:_imageView];

在某个时候,希望在那篇文章中尝试其他想法。

 类似资料:
  • 现在我想把sprite的位置相应地放在我旋转的身体上。在这里我所做的 这是我怎么画的 当我运行我的代码时会发生奇怪的事情。我看到主体正确旋转,但是由于这一行所以sprite的位置始终与主体位置相同。我该怎么做呢?

  • 问题内容: 将转盘旋转到半圆形(北半球)图像的顶部作为背景。范围可以是0-180度。输入进行画布转换的方法时,刻度盘将旋转并停在匹配的值上。这是我根据phrogz传递的帮助和示例进行的尝试 问题答案: 通常,您要执行的操作是: 将上下文转换为画布上对象应旋转的点。 旋转上下文。 通过对象内旋转中心的负偏移来转换上下文。 在0,0处绘制对象。 在代码中: 这是一个实际的示例,展示了这一点。(旋转的数

  • 当我尝试使用旋转图像视图时,我现在开始学习JavaFX 它绕着它的中轴线旋转,但是当我尝试使用 它随机旋转,我不知道它的旋转轴是一样的

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

  • 这是我用来旋转一个图像的代码,这个图像是你可以移动的播放器,播放器旋转得很好,但它的移动就像整个世界都旋转了一样(如果你知道我的意思),所以我需要知道一种方法来旋转播放器而不影响移动/位置,我在谷歌上搜索了一下,没有找到正确的答案,有什么建议吗?

  • 本文向大家介绍jquery 仿锚点跳转到页面指定位置的实例,包括了jquery 仿锚点跳转到页面指定位置的实例的使用技巧和注意事项,需要的朋友参考一下 js 仿锚点跳转到页面指定位置,用的是 offset() 方法 jQuery: offset(): 获取匹配元素在当前视口的相对偏移。 返回的对象包含两个整型属性:top 和 left。此方法只对可见元素有效。 position(): 获取匹配元素