Итак, у меня есть подкласс UIView с именем MovableBlock
. Он переопределяет touchesBegan
, touchesMoved
, touchesEnded
и touchesCancelled
. Перемещение части работает просто отлично.
Когда MovableBlock
перемещается в левую часть экрана, его ширина составляет 130 пикселей. Когда он перемещен в правую часть экрана, его ширина составляет 80 пикселей. Я хотел бы анимировать переход по размеру, чтобы, когда пользователь перетаскивает вид, сглаживание 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
.
Спасибо за любую помощь!