所以,我有一个名为MovableBlock
的UIView子类。它会覆盖touchesBegan
,touchesMoved
,touchesEnded
和touchesCancelled
。移动部分工作正常。
当MovableBlock
移动到屏幕左侧时,它的宽度为130px。当它移动到屏幕的右侧时,它的宽度为80px。我想要调整大小的过渡动画,以便当用户拖动视图时,MovableBlock
平滑调整其大小。
现在,我有这个:
// Handles the start of a touch
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint pt = [[touches anyObject] locationInView:self];
startLocation = pt;
}
// Handles the continuation of a touch.
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint svpt = [[touches anyObject] locationInView:self.superview];
CGPoint pt = [[touches anyObject] locationInView:self];
if (svpt.x < 130) {
[self setColumn:0];
}
else {
[self setColumn:1];
}
CGRect frame = [self frame];
frame.origin.x += pt.x - startLocation.x;
frame.origin.y += pt.y - startLocation.y;
[self setFrame: frame];
}
-(void)setColumn: (NSInteger)newColumn {
column = newColumn;
if (column != newColumn) {
[UIView beginAnimations:@"Resize Block" context:nil];
[UIView setAnimationDuration:0.2];
if (column == 0) {
[self setBounds: CGRectMake(self.bounds.origin.x, self.bounds.origin.y, 130, self.bounds.size.height)];
}
else {
[self setBounds: CGRectMake(self.bounds.origin.x, self.bounds.origin.y, 80, self.bounds.size.height)];
}
[UIView commitAnimations];
}
}
startPosition
和column
都是该类的成员。
在拖动MovableBlock
时,它不会调整大小(或动画)。我似乎无法找到任何理由它不应该工作,虽然我也找不到这样做的例子,所以也许有一些我遗漏的微妙技巧。
touchesEnded
方法中有另一个动画效果很好,所以我知道动画的一部分工作正常,而不是touchesMoved
。
感谢您的帮助!
答案 0 :(得分:0)
我似乎已经弄明白了。使用setColumn方法中的setBounds似乎没有被frame = [self frame]
的后续调用注意到。将框架声明移到顶部,在调用setColumn
之上,并重新调整如何确定当前列的宽度解决了问题。
另外,不要混合帧和边界。你只会混淆你的头肉。 : - )