我正在开发一个应用程序,可以让用户使用UIGestureRecognizers调整照片的大小和旋转。我有这个代码,它根据用户应用触摸的位置来调整anchorPoint (让它看起来像是在他们手指实际所在的位置缩放图像):
- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
UIView *gestureRecognizerView = gestureRecognizer.view;
CGPoint locationInView = [gestureRecognizer locationInView:gestureRecognizerView];
CGPoint locationInSuperview = [gestureRecognizer locationInView:gestureRecognizerView.superview];
gestureRecognizerView.layer.anchorPoint = CGPointMake(locationInView.x / gestureRecognizerView.bounds.size.width, locationInView.y / gestureRecognizerView.bounds.size.height);
gestureRecognizerView.center = locationInSuperview;
}稍后,我只想用下面的代码计算基于中心和边界的原点:
CGRect transformedBounds = CGRectApplyAffineTransform(view.bounds, view.transform);
CGPoint origin = CGPointMake(view.center.x - (transformedBounds.size.width * view.layer.anchorPoint.x), view.center.y - (transformedBounds.size.height * view.layer.anchorPoint.y));而且结果不正确(我正在与frame值进行比较,讽刺的是,frame值应该是无效的,但实际上它确实具有正确的值)。
所以总而言之,我想知道,我在这里没有考虑到什么?anchorPoint是如何以一种我无法确定的方式影响中心的?
发布于 2015-03-31 22:33:40
我认为问题是你计算的origin并不是一个原点,而是你的transformedBounds矩形原点的一个偏移量。
我还没有完全测试它,但是如果你这样做,你应该会得到正确的框架:
CGRect transformedBounds =
CGRectApplyAffineTransform(view.bounds, view.transform);
CGSize originOffset = CGSizeMake(
view.center.x - (transformedBounds.size.width * view.layer.anchorPoint.x),
view.center.y -
(transformedBounds.size.height * view.layer.anchorPoint.y));
transformedBounds.origin.x += originOffset.width;
transformedBounds.origin.y += originOffset.height;https://stackoverflow.com/questions/28906569
复制相似问题