Перетащите UIImageView в ограниченном диапазоне - PullRequest
1 голос
/ 03 июля 2011

Как можно перетащить UIImageView, но только в пределах определенной области экрана?Мой код в настоящее время выглядит следующим образом:

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [[event allTouches] anyObject];
    touch.view.frame = CGRectMake(104, 171, 113, 49);

    if([touch view] == toggle)
    {

        CGPoint location = [touch locationInView:self.view];
        CGPoint newLocation = CGPointMake(toggle.center.x, location.y);

        toggle.center = newLocation;
        NSLog(@"%f \n",toggle.center.y);

    }  
}

Я хочу иметь возможность перетаскивать изображение только в пределах определенного мной кадра.

Ответы [ 2 ]

1 голос
/ 04 июля 2011

Вы можете использовать CGRectContainsRect(rect1, rect2), чтобы проверить, находится ли первый прямоугольник полностью внутри второго

bool CGRectContainsRect (
   CGRect rect1,
   CGRect rect2
);

Когда вы используете UIViews и хотите увидеть, попадает ли одно представление полностью в кадр за секунду, связанная функция CGRectContainsRect выполнит проверку за вас. Это не проверяет пересечение; объединение обоих прямоугольников должно быть равно первому прямоугольнику, чтобы это возвращало true. Функция принимает два аргумента. Первый прямоугольник всегда является окружающим предметом. Второй аргумент либо полностью попадает в первый, либо нет.

Так что ваш код может быть примерно таким

CGPoint location = [touch locationInView:self.view];
CGPoint newLocation = CGPointMake(toggle.center.x, location.y);

CGRect r = CGRectMake(newLocation.x-self.frame.size.width/2, 
                      newLocation.y-self.frame.size.height/2, 
                      self.frame.size.width,
                      self.frame.size.height);
if(CGRectContainsRect(r, theOtherRect)){
    toggle.center = newLocation;
    NSLog(@"%f \n",toggle.center.y);
}

Другие полезные функции CoreGraphics: http://blogs.oreilly.com/iphone/2008/12/useful-core-graphics-functions.html

Еще один совет: NSLog(@"%@", NSStringFromCGPoint(toggle.center)) облегчает регистрацию CGTypes. используйте эквивалентно: NSStringFromCGRect(rect)

0 голосов
/ 03 июля 2011
if (newLocation.y > NSMaxY(touch.view.frame)) newLocation.y = NSMaxY(touch.view.frame);
if (newLocation.y < NSMinY(touch.view.frame)) newLocation.y = NSMinY(touch.view.frame);
toggle.center = newLocation;

Вы можете сделать то же самое для координаты х, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...