Я разрабатываю простую анимацию где, по UIImageView
движется по UIBezierPath
, теперь я хочу, чтобы предоставить пользователю Интерактивного к движущемуся UIImageView
, так что пользователь может направлять UIImageView
коснувшись UIImageView
и сопротивление UIImageview
вокруг экрана.iPhone - Переместить объект по сенсорным и перетащить путь
ответ
Таким образом, вы хотите, чтобы пользователь мог коснуться изображения в середине анимации ключевого кадра вдоль изогнутого пути и перетащить его в другое место? Что вы хотите сделать с анимацией в этот момент?
У вас есть несколько задач.
Сначала обнаруживается прикосновение к объекту, в то время как анимация ключевого кадра «находится в полете».
Для этого вы хотите использовать метод hitTest слоя представления слоя родительского представления.
Уровень представления слоя представляет собой состояние слоя в любой момент времени, включая анимацию.
Как только вы обнаружите штрихи на своем представлении, вам нужно будет получить текущее местоположение изображения с уровня презентации, остановить анимацию и перенести с помощью анимации touchsMoved/touchhesDragged.
Я написал демонстрационное приложение, которое показывает, как обнаружить касания объекта, который анимируется вдоль пути. Это будет хорошей отправной точкой.
Посмотрите здесь:
Core Animation demo including detecting touches on a view while an animation is "in flight".
Измените рамку с изображением в touchesMoved:withEvent:.
Edit: Некоторый код
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
UITouch *touch = [[event allTouches] anyObject];
if ([touch.view isEqual: self.view] || touch.view == nil) {
return;
}
lastLocation = [touch locationInView: self.view];
}
- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
UITouch *touch = [[event allTouches] anyObject];
if ([touch.view isEqual: self.view]) {
return;
}
CGPoint location = [touch locationInView: self.view];
CGFloat xDisplacement = location.x - lastLocation.x;
CGFloat yDisplacement = location.y - lastLocation.y;
CGRect frame = touch.view.frame;
frame.origin.x += xDisplacement;
frame.origin.y += yDisplacement;
touch.view.frame = frame;
lastLocation=location;
}
Вы должны также осуществлять touchesEnded:withEvent:
и touchesCanceled:withEvent:
.
Хорошо, но как распознать прикосновение к конкретному объекту? – Pete
Объекты в наборе 'touchhes', которые вы получаете в этом методе, являются UITouches, и поэтому они имеют свойство' view', которое представляет собой представление, в котором первоначально произошло касание. – dasdom
Возможно ли вам поделиться небольшим фрагментом кода? – Pete
Самый простой способ - это подклассы UIImageView
.
Для простого перетаскивания взглянуть на код здесь (код заимствованные из пользователя MHC):
Так как вы хотите, чтобы перетащить на пути Безье вам придется изменить touchesMoved:
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *aTouch = [touches anyObject];
//here you have location of user's finger
CGPoint location = [aTouch locationInView:self.superview];
[UIView beginAnimations:@"Dragging A DraggableView" context:nil];
//commented code would simply move the view to that point
//self.frame = CGRectMake(location.x-offset.x,location.y-offset.y,self.frame.size.width, self.frame.size.height);
//you need some kind of a function
CGPoint calculatedPosition = [self calculatePositonForPoint: location];
self.frame = CGRectMake(calculatedPosition.x,calculatedPosition.y,self.frame.size.width, self.frame.size.height);
[UIView commitAnimations];
}
Что именно вы хотели бы сделать в -(CGPoint) calculatePositionForPoint:(CGPoint)location
зависит от вас. Например, вы можете вычислить точку в пути Безье, которая наиболее близка к location
. Для простого теста вы можете сделать:
-(CGPoint) calculatePositionForPoint:(CGPoint)location {
return location;
}
По пути тебе придется решить, что произойдет, если пользователь чудеса от далеко от вашего расчетном пути Безье.
- 1. Переместить объект в iPhone?
- 2. Как перетащить и переместить UITextFields?
- 3. Пытается переместить/перетащить SKSpriteNode по оси y
- 4. Переместить объект в касание - iPhone
- 5. Как переместить объект туда и обратно с сенсорным экраном в iOS
- 6. iPhone перетащить
- 7. Xcode6 - Swift: как определить, какой объект коснулся и переместить/перетащить/перетащить?
- 8. Libgdx, Android, как перетащить и переместить текстуру
- 9. iPhone: Как перетащить или переместить UIImage/UIButton, как показано ниже?
- 10. Не могу перетащить и переместить форму WPF
- 11. iphone cocoa: как перетащить изображение по пути
- 12. сдерживающее движение перетащить по пути в iphone
- 13. события с сенсорным экраном iPhone
- 14. Android: Как перетащить (переместить) PopupWindow?
- 15. Объект Visual Basic6.0 не может перетащить, чтобы переместить
- 16. Возможно ли и как перетащить объект GDI?
- 17. Как перетащить файл и получить его путь
- 18. iPhone - управляйте сенсорным слайдом в UIViewController
- 19. jQuery перетащить и перетащить снова
- 20. Можно ли перетащить и переместить UISelect (Multiple), чтобы отсортировать список?
- 21. d3 перетащить путь не работает
- 22. Как перетащить ярлык и опустить на UIToolbarItem в iphone
- 23. Невозможно перетащить или переместить пользовательский NSWindow
- 24. UIButton как с сенсорным, так и с сенсорным повторением?
- 25. Переместить объект по сетке в направлении заголовка
- 26. Переместить путь onkeydown
- 27. Рисовать объект на изображении и перетащить изображение
- 28. андроид студия - движущийся объект и перетащить
- 29. iPhone - Tilt, чтобы переместить
- 30. Как перетащить кнопки на Iphone
сэр У меня такая же проблема, как у вас есть, пожалуйста, помогите мне, если вы сделаете эту вещь. –