1

基本的にクリック可能な (タッチ可能な) 領域を持つ画像を含むサードパーティの UIView を表示しようとしています。たとえば、クリックするとWebページが起動するリージョンが含まれています。このUIViewを全画面表示するUIViewControllerを作成しました。画像の幅と高さはわかっているので、このビューを全画面に合わせて拡大縮小する必要があります。

これが私の問題です。画像を拡大縮小しようとすると、サブビューのクリック可能な領域がクリックできなくなります。

スケーリングを行う方法は次のとおりです。

    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];

変換を行うと、すべてのタッチがそのサブビューではなく、ビュー コントローラーに移動するようになりました。今は何もクリックできません。変換を行わない場合、または変換を行っても ID を使用すると、すべてが機能しますが、希望どおりにスケーリングされません。変換すると、正しくスケーリングされますが、タッチが機能しません。

ビュー コントローラーでタッチを検出しようとすると、タッチ イベントを受け取ることができます。しかし、タッチ イベントをサードパーティ ビューに転送する方法がわかりません。

助言がありますか?

4

1 に答える 1

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;
于 2013-11-19T19:25:38.890 に答える