UIView缩放变换导致输入丢失

时间:2013-11-19 00:50:47

标签: ios uiview uiviewcontroller cgaffinetransform cgaffinetransformscale

我正在尝试显示第三方UIView,它基本上包含一些带有一些可点击(可触摸)区域的图像。例如,它包含一个区域,单击该区域即可启动网页。我为此创建了一个UIViewController,它应该将这个UIView显示为全屏。我知道图像的宽度和高度,所以我需要缩放此视图以适应整个屏幕。

以下是我的问题:当我尝试缩放图片时,子视图中的可点击区域不再可点击。

以下是我如何进行缩放:

    float scalingFactor = (adAspectRatio > deviceAspectRatio) ? deviceWidth / adWidth : deviceHeight / adHeight;
    float scaledWidth = adWidth * scalingFactor;
    float scaledHeight = adHeight * scalingFactor;
    adFrame = CGRectMake((deviceWidth - scaledWidth) / 2.0f, (deviceHeight - scaledHeight) / 2.0f, adWidth, adHeight);
    thirdpartyview.transform = CGAffineTransformScale(CGAffineTransformIdentity, scalingFactor, scalingFactor);
    [thirdpartyview setFrame:adFrame];
    ...
    [self.view addSubview:thirtpartyview];

在进行转换时,所有触摸现在都转到我的视图控制器,而不是那个子视图。现在我无法点击任何内容。如果我不进行转换,或者如果我使用标识进行转换,则一切正常,但它不会按照我的要求进行缩放。当我转换时,它可以正确缩放,但触摸不起作用。

如果我尝试检测视图控制器上的触摸,我可以接收触摸事件。但我不知道如何将触摸事件转发给第三方视图。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我想出了我的问题。我太早做了变换。基本上,转换是在子视图甚至存在于第三方视图之前完成的。一旦我找到了正确的时间来执行转换,我就可以通过在视图控制器中执行以下操作来缩放视图已满屏幕:

CGRect screen = [[UIScreen mainScreen] bounds];
float deviceWidth = screen.size.height;
float deviceHeight = screen.size.width;
if (_mask & UIInterfaceOrientationMaskPortrait) {
    deviceWidth = screen.size.width;
    deviceHeight = screen.size.height;
}

CGRect r = self.yadView.frame;
float scaledWidth = r.size.width*_scalingFactor;
float scaledHeight = r.size.height*_scalingFactor;
self.yadView.center = CGPointMake(scaledWidth/2.0f, scaledHeight/2.0f);
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, (deviceWidth - scaledWidth) / 2.0f, (deviceHeight - scaledHeight) / 2.0f);
transform = CGAffineTransformScale(transform, _scalingFactor, _scalingFactor);
self.thirdpartyview.transform = transform;