【发布时间】:2012-01-04 17:46:55
【问题描述】:
我有 1 个视图和 2 个子视图。其中一个比另一个大 10 倍。我有一个大手势识别器(在顶部)。
我希望能够从手指之间的锚点通过捏合手势缩放大的。我希望小家伙从同一个全局位置锚点进行相同的变换,但不改变自己的锚点。
希望我自己解释一下。代码如下:
- (void)twoFingerPinch:(UIPinchGestureRecognizer *)gestureRecognizer
{
//this changes the anchor point of "big" without moving it
[self adjustAnchorPointForGestureRecognizer:gestureRecognizer];
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
CGAffineTransform transform = CGAffineTransformScale([[gestureRecognizer view] transform], [gestureRecognizer scale], [gestureRecognizer scale]);
float scale = sqrt(transform.a*transform.a+transform.c*transform.c);
//this transforms "big"
[gestureRecognizer view].transform = transform;
//anchor point location in little view
CGPoint pivote = [gestureRecognizer locationInView:little];
CGAffineTransform transform_t = CGAffineTransformConcat(CGAffineTransformMakeTranslation(-pivote.x, -pivote.y), transform);
transform_t = CGAffineTransformConcat(transform_t, CGAffineTransformMakeTranslation(pivote.x, pivote.y));
little.transform = transform_t;
}
[gestureRecognizer setScale:1];
}
但这不起作用,小视图不断跳来跳去,发疯了。
编辑:更多信息。
好的,这是图表:
红色方块是大视野,深色方块是小视野。虚线方块是主视图。
行:[self adjustAnchorPointForGestureRecognizer:gestureRecognizer];将大视图锚点更改为捏合手势的中心。这行得通。
当我缩放大视图时,小视图应该缩放相同的量并移动,以便它像现在一样在大视图中居中。也就是说,它应该使用与大视图相同的锚点进行缩放。
如果可能的话,我想将这些转换保留在 CGAffineTransform 中的小视图中。
【问题讨论】:
-
您能否添加一些图表来显示视图在紧要关头之前的外观,然后它们应该如何外观?我无法从描述中得到你想要的效果。
-
进一步编辑,我在下面的回复的本质仍然有效。根据比例因子和大视图的位置(可以从框架中获取)计算小视图的新位置,并创建将其放置在那里的变换。
标签: objective-c cgaffinetransform