我正在尝试显示第三方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];
在进行转换时,所有触摸现在都转到我的视图控制器,而不是那个子视图。现在我无法点击任何内容。如果我不进行转换,或者如果我使用标识进行转换,则一切正常,但它不会按照我的要求进行缩放。当我转换时,它可以正确缩放,但触摸不起作用。
如果我尝试检测视图控制器上的触摸,我可以接收触摸事件。但我不知道如何将触摸事件转发给第三方视图。
有什么建议吗?
答案 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;