2014-02-05 2 views
0

У меня есть представление, которое содержит UIScrollView, который предназначен для прокрутки по горизонтали. (Таким образом, UIScrollView шире, чем ширина Self.View)проверить, является ли UView внутри Self.View границ

Внутри UIScrollView У меня есть дюжина UILables, которые я разрешаю пользователю циклически добавлять значения программно, когда следующий программный код UILable является программным, если он вышел из bouds Я изменяю смещение UIScrollViews, чтобы убедиться, что UILabel появляется только слева от правой части представления.

Вот как я сейчас проверяю позицию UILabel, а затем корректирую смещение UILabel.

if (positionLabel.frame.origin.x > self.view.frame.size.width) 
{ 
    [axisContainerScrollView setContentOffset:CGPointMake(positionLabel.frame.origin.x+40 - self.view.frame.size.width, axisContainerScrollView.frame.origin.y) 
            animated:YES]; 
} 
else if (positionLabel.frame.origin.x > self.view.frame.size.width) 
{ 
    axisContainerScrollView setContentOffset:CGPointMake(0.0, axisContainerScrollView.frame.origin.y) 
            animated:YES]; 
} 

Так positionLabel происхождение возвращает значение его позиции внутри UIScrollView я изменить смещение axisContainerScrollView. единственная проблема заключается в том, что если я прокручу представление и выберите UILabel, то смещение уже находится внутри представления, если отправить метку обратно вправо.

Я хотел был бы отрегулировать это, если statment, чтобы if UILabel находится внутри границ self.view, тогда я не хочу менять смещение.

Надеюсь, это имеет смысл, любая помощь будет принята с благодарностью.

ответ

0

Вы посмотрели [UIScrollView scrollRectToVisible:animated:]? Это может быть более элегантный способ делать то, что вы хотите. Я уверен, что он не будет прокручивать, если прямоугольник уже виден.

+0

Хорошо, я сейчас изучу это. Я все еще не чувствую, что это исправит мою проблему, касающуюся не прокрутки, когда UILabel уже находится в границах. – HurkNburkS

1

Вы можете преобразовать координатное пространство positionLabel.frame быть такой же, как self.view, то вы можете использовать CGRectContainsRect функцию для сравнения Вы желаете сделать.

что-то вроде -

// convert label frame 
CGRect comparisonFrame = [axisContainerScrollView convertRect:positionLabel.frame toView:self.view]; 
// check if label is contained in self.view 
BOOL isContainedInView = CGRectContainsRect(self.view.frame, comparisonFrame); 

Теперь у вас есть BOOL, вы можете разместить в любом условна, что вы можете использовать, чтобы проверить.

+0

Возможно, вы захотите сравнить с self.view.bounds, а не с self.view.frame. – benvolioT

Смежные вопросы