2

我有一个允许用户平移和放大图像的应用程序。我认为,没有太多麻烦,用户可以让自己进入放大到图像的一部分的状态,并希望将所有内容重置为“基本状态”(即,将所有的翻译和分别重新缩放回 0 和 1)。

我正在通过以下方式进行翻译:

- (void)panGestureRecognized:(UIPanGestureRecognizer *)recognizer
{
  CGPoint translation = [recognizer translationInView:self.view];
  recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                   recognizer.view.center.y + translation.y);
  [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
}

这很好用,我可以翻译图像。

如果我按下按钮,我希望能够将翻译改回 0,0。一种方法似乎是存储手势识别器并将其设置回零,如下所示:

mPanRecognizer.view.center = CGPointMake(mPanRecognizer.view.center.x,
                                   mPanRecognizer.view.center.y);
[mPanRecognizer setTranslation:CGPointMake(0,0) inView:self.view];

其中 mPanRecognizer 是存储识别器的成员变量。但是,这样做会产生以下日志信息,而没有实际的行为变化:

Ignoring call to [UIPanGestureRecognizer setTranslation:inView:] since gesture recognizer is not active.

那么如何通过按下按钮将手势重置为 0,0?

4

1 回答 1

2

这可以在不使用手势识别器的情况下完成。要设置缩放,请使用

[self.view setBound:CGRectMake(0,0,width,height)];

wherewidthheight是您设备的尺寸。

要设置翻译,请使用

[self.view setCenter:CGPointMake(width/2.0,height/2.0)];

要轻松设置宽度和高度,请将视图包含在单独的 UIView 中。让 UIView 以正确的 z 顺序正确锚定,然后您可以将上述行修改为

[imageView setBounds:CGRectMake(0,0,imageView.superview.bounds.size.width,imageView.superview.bounds.size.height)];
[imageView setCenter:CGPointMake(imageView.superview.center.x, imageView.superview.center.y)];

从而避免了对特定设备特定的任何点或幻数的故事。

于 2012-11-29T20:25:32.153 回答