2

重複の可能性:
iPhone での回転後の UIView フレームの奇妙な動作

ビューを回転およびサイズ変更する機能を持つアプリを実行しています。この機能を実装しましたが、問題に直面しています。

私の問題

ビューの四隅をドラッグすると、ビューのサイズが変更されます。サイズを変更した後、ビューを両方向に回転させることができます。

回転が完了したら、角をドラッグしてビューのサイズを再度変更しようとすると、ビューのサイズが予測できない値になり、画面全体に移動します。

同様の問題

私はたくさんグーグルで検索しましたが、完璧な答えは得られませんでした。何人かの人々が同じ質問をしましたが、誰も良い結果を得ませんでした. 私はそれに多くの時間を費やしましたが、解決できませんでした。助けてください 以下は、同様の質問のリストです。

類似質問リンク : 1

類似質問リンク : 2

私のサンプルコード

リンク

ビューのサイズを変更するコード

Touches Beganメソッド

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

UITouch *touch = [[event allTouches] anyObject];

NSLog(@"[touch view]:::%@",[touch view]);

touchStart = [[touches anyObject] locationInView:testVw];
isResizingLR = (testVw.bounds.size.width - touchStart.x < kResizeThumbSize && testVw.bounds.size.height - touchStart.y < kResizeThumbSize);
isResizingUL = (touchStart.x <kResizeThumbSize && touchStart.y <kResizeThumbSize);
isResizingUR = (testVw.bounds.size.width-touchStart.x < kResizeThumbSize && touchStart.y<kResizeThumbSize);
isResizingLL = (touchStart.x <kResizeThumbSize && testVw.bounds.size.height -touchStart.y <kResizeThumbSize);    
}

Touches Moved メソッド

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint touchPoint = [[touches anyObject] locationInView:testVw];
CGPoint previous=[[touches anyObject]previousLocationInView:testVw];




float  deltaWidth = touchPoint.x-previous.x;
float  deltaHeight = touchPoint.y-previous.y;

NSLog(@"CVTM:%@",NSStringFromCGRect(testVw.frame));


if (isResizingLR) {
    testVw.frame = CGRectMake(testVw.frame.origin.x, testVw.frame.origin.y,touchPoint.x + deltaWidth, touchPoint.y + deltaWidth);
}  
if (isResizingUL) {
    testVw.frame = CGRectMake(testVw.frame.origin.x + deltaWidth, testVw.frame.origin.y + deltaHeight, testVw.frame.size.width - deltaWidth, testVw.frame.size.height - deltaHeight);
} 
if (isResizingUR) {
    testVw.frame = CGRectMake(testVw.frame.origin.x ,testVw.frame.origin.y + deltaHeight,  testVw.frame.size.width + deltaWidth, testVw.frame.size.height - deltaHeight);      
} 
if (isResizingLL) {
    testVw.frame = CGRectMake(testVw.frame.origin.x + deltaWidth ,testVw.frame.origin.y ,  testVw.frame.size.width - deltaWidth, testVw.frame.size.height + deltaHeight);   
}

if (!isResizingUL && !isResizingLR && !isResizingUR && !isResizingLL) {
    testVw.center = CGPointMake(testVw.center.x + touchPoint.x - touchStart.x,testVw.center.y + touchPoint.y - touchStart.y);
}

}

サイズ変更前の最初のステップ

次に、サイズを変更して回転させます

第三に、サイズを変更しようとしましたが、元の位置に戻ります

これらは、参照用の更新された画面です...

4

1 に答える 1

4

The frame property is undefined when transform != CGAffineTransformIdentity, as per the docs on UIView. That must be your problem.

于 2012-09-28T08:17:51.803 に答える