我已经使用
实现了拖放功能-(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];
答案 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用于似乎不是动画的动画。如果您正在使用自动布局,则此线程可能更有用:
答案 1 :(得分:0)
我的解决方案是添加一个在touchesBegan
结束时调用的虚方法。这消除了我遇到的问题,并且在touchesMoved
被触发之前动画可见。