サブビューとして追加された別のUIViewが内部にある私のVCのビュー(self.view)であるUIViewがあります。私はスーパービュー内のサブビューの動きを制限したいと思います。基本的には、サブビューはスーパービュー境界の外に出てはなりません。
私は、この作品とサブビューが動いているが、それはまた、スーパーの外に移動しスーパービュー境界内のサブビューの移動を制限する
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
// i check if point of touch is inside my superview i set the center i.e
UITouch *touch = [[UITouch allObjects] firstObject];
if (CGRectContainsPoint(subview.frame, [touch locationInView:self.view])) {
// set the center here... i.e
subview.center = [touch locationInView:self.view];
}
を実装しました。どのようにしてスーパービュー内での動きを制限できますか?
私は同じようなものを試しました。
if (CGRectContainsRect(self.view.bounds, subview.frame)) {
// this condition works but i don't know why my subview sticks to the sides of superview if i try to drag it through the bounds of superview
}
私もtouchesBegan、touchesCancelledで何もしない、とtouchesEnd内の関連は何もありません。代わりにセンタリングを、
@implementation DraggableView
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
// restrict to superview bounds
CGRect parentFrame = [self.superview bounds];
UITouch *aTouch = [touches anyObject];
CGPoint location = [aTouch locationInView:self];
CGPoint previousLocation = [aTouch previousLocationInView:self];
// new frame for this "draggable" subview, based on touch offset when moving
CGRect newFrame = CGRectOffset(self.frame, (location.x - previousLocation.x), (location.y - previousLocation.y));
if (newFrame.origin.x < 0) {
// if the new left edge would be outside the superview (dragging left),
// set the new origin.x to Zero
newFrame.origin.x = 0;
} else if (newFrame.origin.x + newFrame.size.width > parentFrame.size.width) {
// if the right edge would be outside the superview (dragging right),
// set the new origin.x to the width of the superview - the width of this view
newFrame.origin.x = parentFrame.size.width - self.frame.size.width;
}
if (newFrame.origin.y < 0) {
// if the new top edge would be outside the superview (dragging up),
// set the new origin.y to Zero
newFrame.origin.y = 0;
} else if (newFrame.origin.y + newFrame.size.height > parentFrame.size.height) {
// if the new bottom edge would be outside the superview (dragging down),
// set the new origin.y to the height of the superview - the height of this view
newFrame.origin.y = parentFrame.size.height - self.frame.size.height;
}
// update this view's frame
self.frame = newFrame;
}
@end
これは、タッチのオフセットを使用しています:
ビンゴ@DonMag:)..... 1点の明確化は、しかし、それだけで原因このタッチに私の解決策が働いていなかったことを相殺されました? – user2606782
ここには1つの問題があります。私はスーパービューに沿ってドラッグすると、サブビューはドラッグされてしまいます.tuchesBeganはそれ(スーパービュー)のために働いていると思います。どうすればこれを避けることができますか? – user2606782
@ user2606782 - あなたが何を求めているのかはっきりしていません...私の答えでは画面キャプチャの編集を参照してください。多分役立つでしょうか? – DonMag