【问题标题】:Segmented control stops working after I animate it分段控制在我为其设置动画后停止工作
【发布时间】: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


【解决方案1】:

看起来您的“移动器”只是在移动 .layer 而不是实际的分段条。层只是控制器的呈现,实际的控制器还在它开始的地方。要解决此问题,您还需要在动画结束时将实际控制器转换到新位置。

类似:

element.transform = CGAffineTransformMakeTranslation(0,-50);

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    相关资源
    最近更新 更多