覆盖UIView的setTransform会破坏UIView上的绘图

时间:2012-08-07 22:24:39

标签: objective-c ios uiview uiscrollview

我有一个视图(它是在滚动视图中放大的视图),我试图只在用户捏或双击缩放时才在x方向上拉伸。这个视图不断被绘制:每秒最多10次,使用Core Graphics绘制图形。

所以我像这样覆盖setTransform:

- (void)setTransform:(CGAffineTransform)newValue;
{
    CGAffineTransform constrainedTransform = CGAffineTransformIdentity;
    constrainedTransform.a = newValue.a;
    [super setTransform:constrainedTransform];
}

这通常给了我想要的行为,除了一个大问题。当经常绘制视图并且用户双击以放大时,整个视图通常会变黑。如果我不重写上述方法(尽管它偶尔会发生一次),这种情况很少发生。同样有趣的是,当用户使用捏合手势进行缩放时,这不会发生。这是双击触发的功能:

- (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer 
{
    CGRect frame = [[self tiledScrollView] frame];
    float newScale = [[self tiledScrollView] zoomScale] * kZoomStep;
    CGRect zoomRect = [self zoomRectForFrame:frame withScale:newScale withCenter:[gestureRecognizer locationInView:[[self tiledScrollView] tileContainerView]]];
    [[self tiledScrollView] zoomToRect:zoomRect animated:YES];
}

捏合手势只是由UIScrollView的股票捏合识别器处理。关于上述函数困扰我的一件事是,即使我的视图仅在一个方向上缩放,zoomRect也在x和y方向上缩放。我尝试仅在x方向上缩放zoomRect然后调用zoomToRect,但是图形不会缩放。

所以似乎UIScrollView的捏合识别器和我的双击识别器以两种不同的方式缩放视图,只有捏合识别器的方式适用于我的代码...而且,当绘制速度减慢时,这个问题变得非常罕见,当没有绘图时,则不存在。我已经尝试使用队列进行绘制和缩放顺序,但我没有太多运气。我怀疑zoomToRect和其他缩放方法可能会将任务分配给其他线程或任何其他线程,所以我不认为它们可以通过这种方式进行顺序化。但这是我应该研究的更多内容吗?

非常感谢任何帮助。我已经浪费了几天试图解决这个问题-_-谢谢

0 个答案:

没有答案
相关问题