2013-07-13 1 views
2

У меня есть элемент в UIView с ограничением, в котором говорится, что он должен всегда быть 10 пикселей в нижней части представления. Затем я пытаюсь оживить высоту этого представления, чтобы он скользил по экрану. Согласно ограничению, элемент должен всегда находиться на расстоянии 10 пикселей от нижней части представления. Это справедливо, когда я добавляю мнение, как так ...Анимация кадра UIView с ограничениями

printView *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"printView"]; 
    [self addChildViewController:vc]; 
    vc.view.frame = CGRectMake(0, 60, vc.view.frame.size.width, HEIGHT); 
    vc.view.layer.masksToBounds = FALSE; 
    [vc.view.layer setShadowOffset:CGSizeMake(0.0, 5.0)]; 
    [vc.view.layer setShadowOpacity:0.8]; 
    vc.view.layer.shadowColor = [[UIColor blackColor] CGColor]; 
    vc.view.layer.shadowRadius = 8; 
    vc.view.clipsToBounds = TRUE; 
    [self.view insertSubview:vc.view aboveSubview:docWebView]; 

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

printView *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"printView"]; 
    [self addChildViewController:vc]; 
    vc.view.frame = CGRectMake(0, 60, vc.view.frame.size.width, 0); 
    vc.view.layer.masksToBounds = FALSE; 
    [vc.view.layer setShadowOffset:CGSizeMake(0.0, 5.0)]; 
    [vc.view.layer setShadowOpacity:0.8]; 
    vc.view.layer.shadowColor = [[UIColor blackColor] CGColor]; 
    vc.view.layer.shadowRadius = 8; 
    vc.view.clipsToBounds = TRUE; 
    [self.view insertSubview:vc.view aboveSubview:docWebView]; 
    [UIView animateWithDuration:5.0 animations:^{ 
     vc.view.frame = CGRectMake(0, 60, vc.view.frame.size.width, 200); 
     [self.view setNeedsDisplay]; 
    }]; 

ограничение больше не чтит и вместо зрения скольжения с использованием элементом всегда 10 пикселов от дна, он выглядит как элемент вскрывается, поскольку элемент не перемещается вместе с представлением. Надеюсь, я достаточно хорошо объясню это. Иначе говоря, я собираюсь снять с карты карту, но, похоже, карта уже там, и лист бумаги, который ее покрывает, отрывается. Спасибо за вашу помощь.

ответ

13

При использовании ограничений вы не должны устанавливать рамки, вы должны корректировать ограничения. Когда вы изначально устанавливаете свои ограничения, вы должны сделать IBOutlet для ограничения высоты, а затем оживить его постоянный параметр в блоке анимации. Если у вас есть ограничение высоты под названием heightCon, вы можете сделать это:

[UIView animateWithDuration:5.0 animations:^{ 
     self.heightCon.constant = 200 
     [self.view layoutIfNeeded]; 
    }]; 

Я не уверен, о вашей структуре, что self.view, возможно, придется vc.view вместо этого.

После Edit:

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

+1

О, человек. Я не знал, что можно создать выход для ограничения. Удивительно! – fnc12

+0

говорят, что у вас есть 4 ярлыка сверху вниз, как бы вы разместили их с помощью автозапуска. я имею в виду, что у вас есть 3 вида ограничений: первая метка и верхняя точка обзора, между двумя ярлыками, последней меткой и нижней частью. Как бы я указал эти ограничения, чтобы он не растягивал промежутки между ними слишком много и не увеличивал высоту самих меток? Я бы дал процентные базовые пространства/расстояния/высоты или только фиксированные суммы (что отличается для iPhone 5,6, плюс iPad mini, iPad Air, iPad Pro). ** Мне просто нужна грубая идея, не нужен код. ** – Honey