【发布时间】:2014-07-04 00:44:21
【问题描述】:
我让分段控件工作,但是当我移动它时,它给了我最奇怪的错误。我只能单击一次然后停止工作。
这是我的动画代码,它弄乱了分段控件
- (void)moveUnitsUp:(UIView*) element {
// Create an animation that will change the position of a layer
CABasicAnimation *mover = [CABasicAnimation animationWithKeyPath:@"position"];
[mover setDuration:0.12];
[mover setBeginTime:CACurrentMediaTime()+0];
// Setting starting position
CGPoint initialPoint = [element.layer position];
[mover setFromValue:[NSValue valueWithCGPoint:initialPoint]];
// Setting ending position
CGPoint finalPoint = CGPointMake(initialPoint.x, initialPoint.y - 50);
[mover setToValue:[NSValue valueWithCGPoint: finalPoint]];
// MAKE SURE IT DOESN'T MOVE BACK TO STARTING POSITION
[mover setRemovedOnCompletion:NO];
[mover setFillMode:kCAFillModeForwards];
// Add it to the layer
[element.layer addAnimation:mover forKey:@"BigMove"];
// SET THE POSITION TO THE STARTING POSITION
[element.layer setPosition:finalPoint];
}
非常感谢您的帮助:-)
【问题讨论】:
-
控件是控制器self.view的子视图,还是其他视图的子视图?为什么要使用这种方法而不是 UIView 方法 animateWithDuration:animations,因为它需要的代码要少得多?
-
我认为它是一个子视图,我在故事板中添加了它。让我试试,但是我仍然想知道为什么这不起作用:-S
-
如果控件移动到其父视图的边界之外,它不会响应触摸。如果它在子视图中,则为该子视图提供背景颜色,以便您可以查看控件是否在它之外(或部分在它之外)。
-
@user3726682 我无法弄清楚为什么您的分段控件停止工作。我假设“停止工作”是指它不再接收触摸事件?但这里有一个小提示:在动画属性时永远不要使用这些线,除非你知道你在做什么。
// MAKE SURE IT DOESN'T MOVE BACK TO STARTING POSITION [mover setRemovedOnCompletion:NO]; [mover setFillMode:kCAFillModeForwards];请查看 [这里][1] 以获得良好的解释和有用的链接。 [1]:stackoverflow.com/a/21160476/1688105
标签: ios objective-c