重複の可能性:
iPhone での回転後の UIView フレームの奇妙な動作
ビューを回転およびサイズ変更する機能を持つアプリを実行しています。この機能を実装しましたが、問題に直面しています。
私の問題
ビューの四隅をドラッグすると、ビューのサイズが変更されます。サイズを変更した後、ビューを両方向に回転させることができます。
回転が完了したら、角をドラッグしてビューのサイズを再度変更しようとすると、ビューのサイズが予測できない値になり、画面全体に移動します。
同様の問題
私はたくさんグーグルで検索しましたが、完璧な答えは得られませんでした。何人かの人々が同じ質問をしましたが、誰も良い結果を得ませんでした. 私はそれに多くの時間を費やしましたが、解決できませんでした。助けてください 以下は、同様の質問のリストです。
私のサンプルコード
ビューのサイズを変更するコード
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);
}
}
サイズ変更前の最初のステップ
次に、サイズを変更して回転させます
第三に、サイズを変更しようとしましたが、元の位置に戻ります
これらは、参照用の更新された画面です...