UIView растягивая сторону вместо регулировки ширины и происхождения - PullRequest
1 голос
/ 10 августа 2011

Это, наверное, простой вопрос, возможно ли это или нет, я понятия не имею;но легко, тем не менее.

Screen       = 0x   0y 1000w 1000h
UIView Start = 500x 0y 500w  1000h
UIView End   = 0x   0y 1000w 1000h

У меня есть UIView, скажем, охватывающий правую сторону экрана с размерами и координатами выше.Прямо сейчас я знаю, чтобы добраться до конечной точки, я должен сделать

CGRectMake(start.origin.x - 500, start.origin.y, start.size.width + 500, start.size.height)

Можно ли просто сделать что-то вроде

[uiview stretchLeftSide:500];

таким образом, мне не нужно прикасаться к началуили ширина напрямую.это вызывает некоторые проблемы, так как представление содержит элементы управления, в которых я не могу управлять привязкой, поэтому они просто переходят в указанное место, а затем представление корректируется (это все анимированный BTW).

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Во-первых, я предполагаю, что ваш UIView (давайте просто назовем его представлением) является подпредставлением Screen (то есть вы сделали что-то вроде [Screen addSubview:view]).

Если вы хотите сделатьанимация, так что левая сторона растягивается так, как вы хотите, в основном все, что вам нужно сделать, это установить начало координат view на (0,0) и размер такой же, как Screen.Для этого вы можете использовать Screen.bounds, именно то, что вы хотите, чтобы конечный кадр view был.Свойство bounds представления всегда будет иметь начало координат (0,0) и размер, равный размеру представления.

Если у вас есть ссылка на Screen, вы можете использовать Screen.boundsкак я упоминал выше, но если вы этого не сделаете, и вы знаете, что view является подвидом Screen, то вы можете использовать view.superview.bounds.

Теперь анимация.Поскольку мне приходится писать приложения, поддерживающие версии iOS, начиная с версии 3.0, я не могу использовать блочную анимацию.Вместо этого я использую UIView методы класса, такие как:

// Here you can enter an identifier to identify your animation
// and an object that will be passed to your delegate. 
// These 2 parameters are only useful if you set an animation delegate 
// using [UIView setAnimationDelegate:delegate];
[UIView beginAnimations:nil context:nil];  

// Duration in seconds    
[UIView setAnimationDuration:0.5];  

// Perform you changes here.
view.frame = view.superview.bounds;

// Commit the changes
[UIView commitAnimations];
0 голосов
/ 10 августа 2011

Насколько я знаю, перемещение и изменение размера UIView таким образом - CGRectMake(start.origin.x - 500, start.origin.y, start.size.width + 500, start.size.height) - это способ сделать это.

Это ужасно, но это то, что я делал раньше. Но вы можете унаследовать UIView и добавить метод stretchLeftSide и реализовать то, что вы хотите. В более длительных проектах это имеет абсолютный смысл и должно быть сделано на практике ...

...