私は画面境界でrectの動きを制限しようとしています。ロジックは簡単ですが、の中にをタップして(どこにいなくても)タップしてドラッグします。それはあなたの指に続き、それはrectの境界線が画面の境界に達したときに停止する必要があります。は画面の境界を移動しますが、どのようにして画面の境界線からrectの動きを制限することができますか
- (void)viewDidLoad {
[super viewDidLoad];
rect.backgroundColor = [UIColor redColor];
}
、私はタップがどこにあるかを把握しようとすると、その矩形の内側に私は私の後
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
//NSLog(@"%s", __PRETTY_FUNCTION__);
UITouch *touch = touches.anyObject;
if (touch.view == rect) {
rect.backgroundColor = [UIColor greenColor];
isSelectedRect = YES;
CGPoint point = [touch locationInView:self.view];
CGPoint center = rect.center;
delta = CGPointMake(point.x - center.x,
point.y - center.y);
} else {
rect.backgroundColor = [UIColor redColor];
isSelectedRect = NO;
}
}
矩形の色を変更した場合この矩形を移動する
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//NSLog(@"%s", __PRETTY_FUNCTION__);
if (isSelectedRect) {
UITouch *touch = touches.anyObject;
CGPoint point = [touch locationInView:self.view];
rect.center = CGPointMake(point.x - delta.x,
point.y - delta.y);
}
}
最終的には、コードの1行を書く必要があります。コードの行は、スクイリエンスの範囲で移動を制限します。私は三元演算子でそれを作るのが完璧だろう。助けていただければ幸いです。
ありがとうございます。それは適切に動作します。ただ1つの質問ですが、速い速度でドラッグすると、rectの境界線が画面境界に触れません。それらの間には小さな領域があります。あなたがそれをゆっくりとすると、すべてが大丈夫です、rectとscreen境界の間にはスペースがありません。なぜそれが起こるのですか? – PaSol
@PaSol私は自分の答えを更新しました。あなたはもう一度それを試すことができます;) – trungduc
ありがとうございます:)すべてが完璧です。 – PaSol