2015-06-18 2 views
0

Я пытаюсь получить UIView, который находится в форме круга, чтобы «отскочить», используя UIKit Dynamics. Он должен отскакивать, когда он достигает нижней части экрана. Круг представляет собой стандарт UIView, который я создаю в методе viewDidLoad следующим образом:Попытка получить UIView для отскока с использованием UIKit Dynamics

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    self.orangeBall = [[UIView alloc] initWithFrame:CGRectMake(100.0, 100.0, 50.0, 50.0)]; 
    self.orangeBall.backgroundColor = [UIColor orangeColor]; 
    self.orangeBall.layer.cornerRadius = 25.0; 
    self.orangeBall.layer.borderColor = [UIColor blackColor].CGColor; 
    self.orangeBall.layer.borderWidth = 0.0; 
    [self.view addSubview:self.orangeBall]; 

    // Initialize the property UIDynamicAnimator 
    self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; 

    [self demoGravity]; 

} 

Я пытаюсь получить эффект отскока сделано внутри метода demoGravity следующим образом:

-(void)demoGravity{ 

UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.orangeBall]]; 

[self.animator addBehavior:gravityBehavior]; 

UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.orangeBall]]; 

[collisionBehavior addBoundaryWithIdentifier:@"myView" 
            fromPoint:self.orangeBall.frame.origin 
            toPoint:CGPointMake(self.orangeBall.frame.origin.x, self.orangeBall.frame.origin.y + self.view.frame.size.height)]; 

[self.animator addBehavior:collisionBehavior]; 
} 

Я хочу " мяч ", чтобы упасть прямо на экран, и как только он достигнет дна представления, остановится и« отскочит ». Однако, когда я запускаю свое приложение, все, что я вижу, это кружок в верхней части экрана, который выпадает на экран. Что я делаю не так?

+0

Первоначально спросила меня, почему мяч не падал и не подпрыгивал. Не просто почему это было неподвижно. Я редактировал код в вопросе, а также заключительную проблему, чтобы включить ваше предложение, но, к сожалению, я все еще испытывал проблемы. Вы указали на свой пример кода в своей книге, который я сделал, и увидели соответствующий блок кода, в котором вы добавили поведение в свой метод doButton, но я, к сожалению, до сих пор не нашел решения. – syedfa

ответ

0

Причины, почему мой мяч не подпрыгивал был два раза:

  1. Он не падал, потому что не имеет gravityBehaviour приложенного к моему UIDynamicAnimator объекту:

    UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.orangeBall]]; 
    
    [self.animator addBehavior:gravityBehavior]; 
    
  2. Это не подпрыгивал, потому что мне нужно было установить логическое свойство CollisionBehaviour: «TranslatesReferenceBoundsIntoBoundary» на «YES».

    [collisionBehavior setTranslatesReferenceBoundsIntoBoundary:YES]; 
    

Особая благодарность Ray Wenderlich, где следующий article предоставил мне решение, и в следующем пункте прямая цитата из статьи:

Вместо явного добавления граничного сотрудничества -определяет, приведенный выше код устанавливает для свойства translateReferenceBoundsIntoBoundary значение YES. Это приводит к тому, чтобы использовать границу за пределы опорной точки зрения, подводимой к UIDynamicAnimator.