2014-09-29 2 views
0

Я пытаюсь добавить надуманное поведение (обнаружение столкновения) для просмотра, которое содержит все содержимое, такое как кнопки и изображения с именем ViewContent [оно должно падать сверху и сталкиваться/отскочить внизу экрана].iOS UIKit Dynamics - не удается добавить оживленное поведение для просмотра

Вот мой вид Иерархия:

view Hierarchy

и код:

viewController.h

@interface LoginViewController : UIViewController <UIScrollViewDelegate, UICollisionBehaviorDelegate> 

@property (weak, nonatomic) IBOutlet UIView *viewContent; 

@property (nonatomic, strong) UIDynamicAnimator *animator; 

@end 

в раскадровке Я установил viewContent кадр как (0, -568, 320, 568), так что это должно произойти сверху

viewController.m

@implementation LoginViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; 

    UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[viewContent]]; 
    gravityBehavior.gravityDirection = CGVectorMake(0.0, 1.0); 

    [self.animator addBehavior:gravityBehavior]; 

    UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[viewContent]]; 

    collisionBehavior.translatesReferenceBoundsIntoBoundary = YES; 
    collisionBehavior.collisionDelegate = self; 
    [self.animator addBehavior:collisionBehavior]; 

    UIDynamicItemBehavior *contentViewBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[viewContent]]; 
    contentViewBehavior.elasticity = 0.4; 

    [self.animator addBehavior:contentViewBehavior]; 

В результате ничего не происходит. Я следую этому руководству http://www.teehanlax.com/blog/introduction-to-uikit-dynamics/ и могу добавить обнаружение столкновения на квадрат с фреймом (100, 100, 100, 100), но не смог добавить столкновение на ракурсе (0, 0, 320, 568).

Я новичок и не могу понять, любые идеи/предложения, пожалуйста.

Update Nib вид добавлен как предложил @Fogmeister.
Я добавил отдельный файл представления nib, названный как LoginView, и назначил класс LoginViewController, чтобы я мог добавлять IBOutlets и IBActions из этого Nib.

В LoginViewController's методе ViewDidLoad просто добавили эти строки прямо под [super viewDidLoad

self.content = [[[NSBundle mainBundle] 
       loadNibNamed:@"ViewLogin" 
       owner:self options:nil] 
       firstObject]; 

[self.view addSubview:self.content]; 

остальной части кода остаются такими же, за исключением initWithItemsviewContent просто заменяется этой новой точки зрения self.content.

ответ

0

В настоящий момент вы не можете использовать AutoLayout и UIKit Dynamics вместе. Они просто не работают вместе вообще.

Кроме того, первое правило AutoLayout заключается в том, что вы не можете обновить рамку представления напрямую. Таким образом, ваша строка self.viewContent.frame = CGRectMake = (0, -568, 320, 568); не будет работать.

Что вам нужно сделать с этим представлением, это отключить AutoLayout, чтобы использовать Dynamics.

Увидев, что вы используете раскадровку, проблема в том, что отключение автоматического макета для одного вида отключит его для всех видов.

Если вы хотите, чтобы основной снимок отскочил, то то, что вы можете сделать, это определить этот вид в отдельном наконечнике (или в коде).

В любом случае вам необходимо программно добавить этот вид в представление контроллера представления.

Тогда ваша динамика будет работать.

+0

спасибо за большое предложение. Удаление автозапуска не является вариантом, поэтому я перейду к отдельному варианту nib. – NSIceCode

+0

Я создал отдельный файл острия и назначен тот же класс к этому бобах т.е. LoginViewController и в методе ViewDidLoad я добавил эти строки: self.content = [[[NSBundle mainBundle] \t \t \t \t \t loadNibNamed: @ "ViewLogin " \t \t \t \t \t владелец: опции самостоятельно: ноль] \t \t \t \t \t firstObject]; \t \t [self.view addSubview: self.content]; и ничего не происходит :( – NSIceCode

+0

Мне нужно будет увидеть больше, вы можете отредактировать свой вопрос. – Fogmeister