[英]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模拟器中时,它仅在按住时移动了我的对象,然后停止了,如果再次触摸它,则该对象又移动了一次。 但是是否有一个链接选项,当我按住它时可以使它在屏幕上进行平滑的动画播放,然后在放开时停止播放? 谢谢。
这里有三个部分:
我建议在按下按钮时使用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.