gpt4 book ai didi

objective-c - UIButton 在 CABasicAnimaton 之后在错误的位置接收到 touchEvents

转载 作者:搜寻专家 更新时间:2023-10-30 20:20:57 24 4
gpt4 key购买 nike

我想给按钮添加一个动画,使按钮从 A 点移到 B 点。
下面的代码可以做到。但是奇怪的是当按钮被移动时,它再也检测不到触摸了。
如果你和我点击按钮的原始位置,它可以触发按钮事件。我的代码中是否缺少任何内容?请帮助我。

- (IBAction)button:(id)sender
{

UIButton *lineButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[lineButton addTarget:self action:@selector(press:)forControlEvents:UIControlEventTouchUpInside];
[lineButton setFrame:CGRectMake(50, 50, 50, 50)];
[self.view addSubview:lineButton];
CABasicAnimation *lineAnimation;


lineAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
[lineAnimation setRemovedOnCompletion:NO];
[lineAnimation setDuration:0.15];


[lineAnimation setFillMode:kCAFillModeForwards];
[lineAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];

CGRect rect = CGRectMake(100, 200, 50, 50);
lineAnimation.fromValue = [NSValue valueWithCGPoint: CGPointMake(50, 50)];
lineAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect))];
[lineAnimation setAutoreverses:NO];
[lineButton.layer addAnimation:lineAnimation forKey:@"line"];
}

最佳答案

您必须在 addAnimation 方法之后将新的框架和层设置为按钮的框架/层,例如:

lineButton.frame = rect
lineButton.layer.frame = rect

或者您可以简单地使用动画 block (更易于使用,代码看起来不错,等等),例如:

[UIView animateWithDuration:0.15 animations:^{
lineButton.frame = CGRectMake(100, 200, 50, 50);
}];

关于objective-c - UIButton 在 CABasicAnimaton 之后在错误的位置接收到 touchEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11395335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com