Некорректное изменение размера подвидов UIScrollView при изменении размера кадра scrollView - PullRequest
1 голос
/ 04 ноября 2011

У меня есть ситуация, когда у меня есть подкласс UIView с UIScrollView в качестве члена.

Я анимирую изменение размера UIView и изменяю размер scrollview с его помощью.UIScrollView - это бесконечная галерея изображений (т. Е. 3 представления, которые обмениваются контентом во время подкачки)

[UIView animateWithDuration: ...

, когда я анимирую код, в блоке анимации у меня есть

myView.frame = someNewFrame;

Я думал, что анимация будет интерполировать промежуточные размеры кадра при анимации.т.е. делать вызов во время каждого кадра анимации:

[myView setFrame: someIntermediateFrame];

Поэтому я переопределил метод setFrame myView:

-(void)setFrame:(CGRect)frame
{
    [super setFrame:frame];

    [self resizeSubviews];
}

- (void)resizeSubviews
{
    CGRect frame = self.bounds;

    scrollView.frame = frame;
    scrollView.contentSize = CGSizeMake(frame.size.width * 3.0, frame.size.height);  // 3 pages
    [scrollView setContentOffset:CGPointMake(frame.size.width, 0.0) animated:NO];  // set contentOffset to middlePage
    [scrollView setNeedsDisplay];    // just in case.  don't know if this is necessary.  Currently not helpful.

    frame.origin.x = 0.0;
    frame.origin.y = 0.0;

    pageZeroRect = frame;
    self.pageZero.frame = frame;

    frame.origin.x += frame.size.width;   
    pageOneRect = frame;
    self.pageOne.frame = frame;

    frame.origin.x += frame.size.width;
    pageTwoRect = frame;
    self.pageTwo.frame = frame;
}

Никакой анимации не происходит, кроме содержащего представления.Scrollview (и subviews) просто переходит к своему окончательному значению.

Есть идеи, что не так?Это просто не имеет смысла.Все выглядит хорошо, но под капотом должно быть что-то еще, о чем я не знаю.Я программирую iOS уже 1,5 года, и поэтому я не очень опытный, но и не слишком тупой.

Ответы [ 2 ]

1 голос
/ 28 ноября 2012

Я смотрю на этот вопрос годом позже, на год умнее, и думаю, что ответом будет переопределение layoutSubviews моего подкласса UIView.

или установите для свойства UIView autoresizeSubviews значение YES и установите правильные маски автоматического изменения размера подпредставлений.

0 голосов
/ 04 ноября 2011

Вы пытались не перезаписывать метод setFrame?

Если это не работает, попробуйте установить последний кадр всех ваших подпредставлений в блоке анимации.

...