我有两个图像视图。第一个是蓝色箭头,第二个是白色圆圈,用黑色圆点表示圆圈的中心。
我正在尝试旋转箭头,因此它的锚点是图片中的黑点
现在我将箭头图层的锚点设置为像这样计算的点
CGFloat y = _userImageViewContainer.center.y - CGRectGetMinY(_directionArrowView.frame);
CGFloat x = _userImageViewContainer.center.x - CGRectGetMinX(_directionArrowView.frame);
CGFloat yOff = y / CGRectGetHeight(_directionArrowView.frame);
CGFloat xOff = x / CGRectGetWidth(_directionArrowView.frame);
_directionArrowView.center = _userImageViewContainer.center;
CGPoint anchor = CGPointMake(xOff, yOff);
NSLog(@"anchor: %@", NSStringFromCGPoint(anchor));
_directionArrowView.layer.anchorPoint = anchor;
由于锚点被设置为视图的百分比,即中心的坐标是(.5,.5),我正在计算黑点落在箭头框架中的高度百分比。但是我的数学,即使在手工锻炼之后,仍然会导致.5,这是不对的,因为当箭头处于原始位置(垂直,点向上)时,它会超过一半。
我正在根据用户的指南针标题进行旋转
CLHeading *heading = [notif object];
// update direction of arrow
CGFloat degrees = [self p_calculateAngleBetween:[PULAccount currentUser].location.coordinate
and:_user.location.coordinate];
_directionArrowView.transform = CGAffineTransformMakeRotation((degrees - heading.trueHeading) * M_PI / 180);
旋转是正确的,它只是不起作用的锚点。有关如何实现这一目标的任何想法吗?
答案 0 :(得分:1)
我总是发现锚点的东西片状,特别是旋转。我试试这样的事情。
CGPoint convertedCenter = [_directionArrowView convertPoint:_userImageViewContainer.center fromView:_userImageViewContainer ];
CGSize offset = CGSizeMake(_directionArrowView.center.x - convertedCenter.x, _directionArrowView.center.y - convertedCenter.y);
// I may have that backwards, try the one below if it offsets the rotation in the wrong direction..
// CGSize offset = CGSizeMake(convertedCenter.x -_directionArrowView.center.x , convertedCenter.y - _directionArrowView.center.y);
CGFloat rotation = 0; //get your angle (radians)
CGAffineTransform tr = CGAffineTransformMakeTranslation(-offset.width, -offset.height);
tr = CGAffineTransformConcat(tr, CGAffineTransformMakeRotation(rotation) );
tr = CGAffineTransformConcat(tr, CGAffineTransformMakeTranslation(offset.width, offset.height) );
[_directionArrowView setTransform:tr];
NB。 UIView上的transform属性是可动画的,因此如果需要,你可以将最后一行放在动画块中。
答案 1 :(得分:0)
也许更好地使用更简单的解决方案 - 使箭头图像尺寸更大,更方形。所以黑点将位于图像的中心。
请比较附加的图像,你明白我在说什么
中心有黑点的新图像
带有移位点的旧图像
现在您可以轻松使用标准锚点(0.5,0.5)来旋转已编辑的图像