动画在触发另一个功能之前不可见

时间:2014-08-19 16:41:22

标签: ios objective-c animation

我已经使用

实现了拖放功能
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

touchesBegan中,我检查屏幕上的相应图像是否被点击,我会在同一个地方复制它,然后使用以下代码开始调整它的大小:

[UIView animateWithDuration:1.0f
                     animations:^{
                         CGRect oldFrame = copy.frame;
                         copy.frame = CGRectMake(oldFrame.origin.x,oldFrame.origin.y, oldFrame.size.width+60, oldFrame.size.height+60);
                     }
                     completion:^(BOOL finished){
                     }];

我得到的问题是,在touchesMoved被触发之前,动画实际上是不可见的。换句话说,如果我按下图像并且没有记录超过1秒的移动在此期间没有任何事情发生,但如果我突然移动手指我已经看到调整大小的图像,但如果我开始移动少于1秒我看到如何当我拖动图像时,图像会被重新调整大小。

我应该如何更改代码,以便即使未触发touchesMoved也会调整图片大小?

编辑:

touchesMoved中触发的唯一代码是:

CGPoint newPoint = [[touches anyObject] locationInView:self.view];
[copy setCenter:newPoint];

2 个答案:

答案 0 :(得分:0)

这似乎对我有用(然而,在一个没有使用触摸的例子中)。

CGRect oldFrame = copy.frame;
oldFrame = CGRectMake(oldFrame.origin.x,oldFrame.origin.y, oldFrame.size.width+60, oldFrame.size.height+60);
[copy layoutIfNeeded];
[UIView animateWithDuration:1.0f animations:^{
     copy.frame = oldFrame;
}];

关键是将layoutIfNeeded用于似乎不是动画的动画。如果您正在使用自动布局,则此线程可能更有用:

Are NSLayoutConstraints animatable?

答案 1 :(得分:0)

我的解决方案是添加一个在touchesBegan结束时调用的虚方法。这消除了我遇到的问题,并且在touchesMoved被触发之前动画可见。