动画停止后删除 UIButton
我正在向 UIView 添加一个按钮并创建一个动画。动画停止时如何删除按钮?这是我的代码...
if (myImageCounter < MAX_IMAGES)
{
// Set Counter
myImageCounter++;
// Add Image
OBShapedButton *button = [OBShapedButton buttonWithType:UIButtonTypeCustom];
UIImage *image = [UIImage imageNamed:@"images/Happy.gif"];
int width = [self randomNumberBetween:MAX_WIDTH and:MIN_WIDTH];
int height = width;
// Set button properties
button.adjustsImageWhenHighlighted = NO;
button.adjustsImageWhenDisabled = NO;
[button setImage:image forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, width, height);
[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
// Add button to view
[self.view addSubview:button];
// Animate image
int adjustedMaxX = MAX_X - height;
int adjustedMaxY = MAX_Y - width;
int x0 = [self randomNumberBetween: adjustedMaxX and: MIN_X];
int y0 = [self randomNumberBetween: adjustedMaxY and: MIN_Y];
int x1 = [self randomNumberBetween: adjustedMaxX and: MIN_X];
int y1 = [self randomNumberBetween: adjustedMaxY and: MIN_Y];
int x2 = [self randomNumberBetween: adjustedMaxX and: MIN_X];
int y2 = [self randomNumberBetween: adjustedMaxY and: MIN_Y];
int x3 = [self randomNumberBetween: adjustedMaxX and: MIN_X];
int y3 = [self randomNumberBetween: adjustedMaxY and: MIN_Y];
// Create animage
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
pathAnimation.duration = 1;
// Create path
CGMutablePathRef curvedPath = CGPathCreateMutable();
CGPathMoveToPoint(curvedPath, NULL, x0, y0);
CGPathAddCurveToPoint(curvedPath, NULL, x1, y1, x2, y2, x3, y3);
// Set path
pathAnimation.path = curvedPath;
// Draw path
[myView drawPath:curvedPath];
// Run animation
[button.layer addAnimation:pathAnimation forKey:nil];
// Release path
CGPathRelease(curvedPath);
// Increment image count
[self setImage:(myImageCounter + 1)];
}
我最终做了:
button.tag = uniqueID;
[pathAnimation setValue:[NSString stringWithFormat:@"%d", uniqueID] forKey:@"name"];
然后:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
NSString* name = [theAnimation valueForKey:@"name"];
[self removeImage:[myView viewWithTag:[name intValue]]];
[name release];
}
I am adding a button to a UIView and creating an animation. How do I remove the button when the animation stops? Here is my code...
if (myImageCounter < MAX_IMAGES)
{
// Set Counter
myImageCounter++;
// Add Image
OBShapedButton *button = [OBShapedButton buttonWithType:UIButtonTypeCustom];
UIImage *image = [UIImage imageNamed:@"images/Happy.gif"];
int width = [self randomNumberBetween:MAX_WIDTH and:MIN_WIDTH];
int height = width;
// Set button properties
button.adjustsImageWhenHighlighted = NO;
button.adjustsImageWhenDisabled = NO;
[button setImage:image forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, width, height);
[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
// Add button to view
[self.view addSubview:button];
// Animate image
int adjustedMaxX = MAX_X - height;
int adjustedMaxY = MAX_Y - width;
int x0 = [self randomNumberBetween: adjustedMaxX and: MIN_X];
int y0 = [self randomNumberBetween: adjustedMaxY and: MIN_Y];
int x1 = [self randomNumberBetween: adjustedMaxX and: MIN_X];
int y1 = [self randomNumberBetween: adjustedMaxY and: MIN_Y];
int x2 = [self randomNumberBetween: adjustedMaxX and: MIN_X];
int y2 = [self randomNumberBetween: adjustedMaxY and: MIN_Y];
int x3 = [self randomNumberBetween: adjustedMaxX and: MIN_X];
int y3 = [self randomNumberBetween: adjustedMaxY and: MIN_Y];
// Create animage
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
pathAnimation.duration = 1;
// Create path
CGMutablePathRef curvedPath = CGPathCreateMutable();
CGPathMoveToPoint(curvedPath, NULL, x0, y0);
CGPathAddCurveToPoint(curvedPath, NULL, x1, y1, x2, y2, x3, y3);
// Set path
pathAnimation.path = curvedPath;
// Draw path
[myView drawPath:curvedPath];
// Run animation
[button.layer addAnimation:pathAnimation forKey:nil];
// Release path
CGPathRelease(curvedPath);
// Increment image count
[self setImage:(myImageCounter + 1)];
}
I ended up doing:
button.tag = uniqueID;
[pathAnimation setValue:[NSString stringWithFormat:@"%d", uniqueID] forKey:@"name"];
Then:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
NSString* name = [theAnimation valueForKey:@"name"];
[self removeImage:[myView viewWithTag:[name intValue]]];
[name release];
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以只使用一个简单的标签,如下所示...
创建按钮
删除按钮
You could just use a simple tag, like this....
Creating the button
Removing the button
您可以简单地
在动画代码末尾调用。
You may simply call
at the end of your animation code.