繁体   English   中英

按住按钮时如何移动UIImage?

[英]How do you move a UIImage when you hold a button?

我声明了2个IBActions“ rightButtonPress”和“ leftButtonPress”,将它们链接到2个IBOutlet并在IBactions中运行了一段代码:

-(void)leftButtonPress:(id)sender{
    PlayerSprite.center = CGPointMake(PlayerSprite.center.x - 1, PlayerSprite.center.y);
}

-(void)rightButtonPress:(id)sender{
PlayerSprite.center = CGPointMake(PlayerSprite.center.x + 1, PlayerSprite.center.y);
}

而且我还创建了2个计时器:

- (void)viewDidLoad
{

    TouchLeftCheck = [NSTimer scheduledTimerWithTimeInterval:.01
                                                    target:self
                                                    selector:@selector(leftButtonPress:)
                                                    userInfo:nil
                                                    repeats:YES];

    TouchRightCheck = [NSTimer scheduledTimerWithTimeInterval:.01
                                                    target:self
                                                    selector:@selector(rightButtonPress:)
                                                    userInfo:nil
                                                    repeats:YES];


    BarrelEntrance = [NSTimer scheduledTimerWithTimeInterval:.01
                                                    target:self
                                                    selector:@selector(barrelStartDown)
                                                    userInfo:nil
                                                    repeats:YES];



    [self frontBarrelAnimation];

    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

一切正常,但是当我将其链接到两个IBObject Button时,某事不起作用,当我将IBActions链接至我的Objects(按钮)时,使用“ Touch Down”不起作用。 当我在ios模拟器中时,它仅在按住时移动了我的对象,然后停止了,如果再次触摸它,则该对象又移动了一次。 但是是否有一个链接选项,当我按住它时可以使它在屏幕上进行平滑的动画播放,然后在放开时停止播放? 谢谢。

这里有三个部分:

  1. 动画计时器
  2. 开始触摸事件
  3. 结束触摸事件

我建议在按下按钮时使用NSTimer对视图进行动画处理。 当按下按钮时,此计时器将初始化并启动( touchDown:释放按钮时,此计时器将无效/无效( touchUpInside:touchUpOutside:


因此,首先,将触摸事件绑定到按钮。 (我假设您是在界面构建器中创建这些按钮的,这很好。如果这样,您可以跳过初始化,而直接进入addTarget:方法):

UIButton* leftButton = [[UIButton alloc] initWithFrame:...];
[leftButton addTarget:self action:@selector(startLeftAnimation) forControlEvents:UIControlEventTouchDown];
[leftButton addTarget:self action:@selector(stopAnimation) forControlEvents:UIControlEventTouchUpInside];
[leftButton addTarget:self action:@selector(stopAnimation) forControlEvents:UIControlEventTouchUpOutside];

接下来,声明一个实例变量计时器:

@interface MyViewController
{
    NSTimer* animationTimer;
}

创建按钮事件的方法:

- (void)startLeftAnimation
{
    animationTimer = [NSTimer scheduledTimerWithInterval: 0.02 target:self selector:@selector(animateLeft) userInfo:nil repeats:YES];
}

- (void)stopAnimation
{
    if(animationTimer != nil)
    {
        [animationTimer invalidate];
        animationTimer = nil;
    }
}

最后,创建动画方法

- (void)animateLeft
{
    PlayerSprite.center = CGPointMake(PlayerSprite.center.x - 1, PlayerSprite.center.y);
}

冲洗并重复右按钮动画。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM