限制动画球在屏幕上的位置

时间:2012-07-06 19:07:43

标签: objective-c cocoa-touch animation uiviewanimation

我正在尝试一些简单的动画,并且已经学习了一个基本的弹跳球教程。

如何使用我自己的坐标而不是整个屏幕约束球反弹的位置?我在教程中使用的代码随机从整个屏幕中选择坐标,我想设置它的坐标,这样它只能在屏幕中间的一个小方块中反弹,而不是出去那些界限。

的.m

 int ballx, bally;
 ///////

 ballx = arc4random() % 320;   

 bally = arc4random() % 480; 

 //////////


-(void)movetheball { 
    [UIView beginAnimations: @"MovingTheBallAround" context: nil];   

    [UIView setAnimationDelegate: self];
    [UIView setAnimationDuration: 1.0];
    [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
    myball.frame =  CGRectMake(ballx, bally,myball.frame.size.width,myball.frame.size.height);  
    [UIView commitAnimations];   

}
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(SEL)aSelector {  

    if (finished) {  

        // set new coordinate for ballx and bally  

        ballx = arc4random() % 320; 

        bally = arc4random() % 480;   



        [self movetheball];  

    }  

我看过SO,但除了以下内容之外我找不到类似的东西:

ballx.center = CGPointMake(320/2, [self randNumBetween:-50:-100]); 

我试图适应但没有取得多大成功。我没有大量的编程经验,所以我不确定我是否会偏离该代码

2 个答案:

答案 0 :(得分:3)

ballx = arc4random() % 320; 

bally = arc4random() % 480;

正如您所注意到的那样,您设置球的新坐标的线条,这两个变量只是数字。它们没有名为center的组件,它们也不是CGPoint,所以尽管你提出的修改方法正确,但你自己的事情太复杂了。

您可能不理解的部分是%标志;这是"modulus"运算符。简单来说,它将左侧的数字限制为小于右侧的数字。

请注意,320480恰好是整个屏幕的宽度和高度,并观察到您正在使用该宽度和高度分配模运算的结果表示球的位置的变量。

希望这足以暗示。

答案 1 :(得分:0)

基本上你需要修改以下部分,提出逻辑,让你为必要的视图窗口设置边界。

ballx = arc4random() % 320;   
bally = arc4random() % 480; 

或者您可以创建特定大小的UIView,并通过[Self.view addsubview:constrainedView]将其放置到您想要的任何地方,然后您可以在该视图中添加球。但是你必须再次改变arc4random()%x;其中x是UIView的宽度或高度。