1

私はこれを見てうれしかったです:サブビューのポイントを変換する方法の答えで 、シミュレーターで完璧に機能しました。

しかし、何らかの理由でデバイスでは機能しません.ビューの位置がデバイスによって異なる方法で管理されている可能性がありますか?それとも別の謎ですか? または(うまくいけば)私はそれを間違って書いたので、皆さんが助けてくれます... :)

ここに私の行があります:

CGPoint yoel = [imagePressed.imageView convertPoint:imagePressed.frame.origin toView:nil];
4

2 に答える 2

8

この質問に関連する別の問題があり、rect を変換するときに画面のスケールを考慮する必要があることに気付きました。(つまり、シミュレーターであるからではなく、シミュレーターが非網膜モードであったため、シミュレーターで動作しました)

// the following convertRect is like asking a view: "what would one of your subviews (aView) have for a frame in my (toView) coordinate space if it were to become my subview?
    _originalFrame = [[aView superview] convertRect: aView.frame toView: self];

    CGFloat scale = [[UIScreen mainScreen] scale];

    _originalFrame.origin.x /= scale;
    _originalFrame.origin.y /= scale;
    _originalFrame.size.width /= scale;
    _originalFrame.size.height /= scale;

    NSLog(@"Converted Frame: %@", NSStringFromCGRect(_originalFrame));
于 2012-06-13T09:34:08.500 に答える
2

わかった。それは %d と %f の違いの教訓でした :) どうやら完璧に動作します。

私の間違いは 、CGPointが浮動小数点数であるため、 DLog(@"yoel is %f", yoel.x); DLog(@"yoel is %f", yoel.y); 変更したデバイスで実行する直前に シミュレーターを使用していたため、正しい座標ではなく0を取得したことです...DLog(@"yoel is %d", yoel.x); DLog(@"yoel is %d", yoel.y);

別の教訓 - テストをシミュレーターからデバイスに切り替える前にコードを変更することは決してないので、Apple を責めるのではなく、自分自身を責めないでください :)

于 2011-05-16T06:30:35.460 に答える