Ios 快速点火效应
如何在Swift中实现打火效果 我的意思是,我有一个图像,如果我向右滑动,我想接受,如果我向左滑动,我想拒绝 我可以使用下面的代码:Ios 快速点火效应,ios,cocoa-touch,swift,Ios,Cocoa Touch,Swift,如何在Swift中实现打火效果 我的意思是,我有一个图像,如果我向右滑动,我想接受,如果我向左滑动,我想拒绝 我可以使用下面的代码: @IBAction func SwipeRight(sender: UISwipeGestureRecognizer) { UIView.animateWithDuration(1) { self.Imagem.center = CGPointMake(self.Imagem.center.x - 150, self.Imagem.cent
@IBAction func SwipeRight(sender: UISwipeGestureRecognizer) {
UIView.animateWithDuration(1) {
self.Imagem.center = CGPointMake(self.Imagem.center.x - 150, self.Imagem.center.y )
}
//other things after acception
}
及
但这样用户就不能取消操作。我想,如果用户从边缘(左或右)滑动到增量距离,它将显示一个图像,让用户现在看到,如果他结束移动,动作将发生。否则,用户可以在不结束移动的情况下返回到大于增量的距离,操作将被取消。我要感谢提出解决方案的人。遵循我在Stack Overflow许多人的大力帮助下开发的解决方案:
@IBAction func Arrastei(sender: UIPanGestureRecognizer) {
var origem = CGPoint(x: 0, y: 0)
var translation : CGPoint = sender.translationInView(Imagem)
var txy : CGAffineTransform = CGAffineTransformMakeTranslation(translation.x, -abs(translation.x) / 15)
var rot : CGAffineTransform = CGAffineTransformMakeRotation(-translation.x / 1500)
var t : CGAffineTransform = CGAffineTransformConcat(rot, txy);
Imagem.transform = t
if (translation.x > 100) {
LbResultado.textColor = btVerdadeiro.textColor
LbResultado.text = btVerdadeiro.text
LbResultado.hidden = false
} else {
if (translation.x < -100) {
LbResultado.textColor = btFalso.textColor
LbResultado.text = btFalso.text
LbResultado.hidden = false
} else {
LbResultado.hidden = true
}
}
if sender.state == UIGestureRecognizerState.Ended {
if (translation.x > 100) {
objJogo.Rodada_Vigente!.Responder(true)
} else {
if (translation.x < -100) {
objJogo.Rodada_Vigente!.Responder(false)
} else {
sender.view.transform = CGAffineTransformMakeTranslation(origem.x, origem.y)
sender.view.transform = CGAffineTransformMakeRotation(0)
}
}
}
}
@iAction func Arrastei(发送方:UIPangestureRecognitor){
var origem=CGPoint(x:0,y:0)
变量转换:CGPoint=sender.translationView(Imagem)
var txy:CGAffineTransform=CGAffineTransformMakeTranslation(translation.x,-abs(translation.x)/15)
var rot:CGAffineTransform=CGAffineTransformMakeRotation(-translation.x/1500)
变量t:cGraffeTransform=cGraffeTransformConcat(rot,txy);
Imagem.transform=t
如果(translation.x>100){
LbResultado.textColor=btVerdadeiro.textColor
LbResultado.text=btVerdadeiro.text
LbResultado.hidden=false
}否则{
如果(翻译.x<-100){
LbResultado.textColor=btFalso.textColor
LbResultado.text=btFalso.text
LbResultado.hidden=false
}否则{
LbResultado.hidden=true
}
}
如果sender.state==UIGestureRecognitizerState.Ended{
如果(translation.x>100){
objJogo.Rodada_Vigente!。响应者(真)
}否则{
如果(翻译.x<-100){
objJogo.Rodada_Vigente!。响应者(错误)
}否则{
sender.view.transform=CGAffineTransformMakeTransform(origem.x,origem.y)
sender.view.transform=CGAffineTransformMakeRotation(0)
}
}
}
}
此解决方案使用:
Imagem-->UIImageView
-接受或拒绝
LbResultado-->UITextView
-向用户显示他处于接受或拒绝区域
没有数学计算来设置旋转和平移。我使用的值能给我带来良好的视觉效果。
当用户向左(拒绝)或向右(接受)拖动超过100像素的图像时,会出现操作(接受和拒绝)区域。如果用户结束动作区域外的移动,图像将返回其原始位置
如果有人建议对此代码进行改进,我会很高兴。最好在此处使用UIPangestureRecognitor并管理其状态,正如您已经了解的那样。对于管理卡来说,创建类管理器是一个很好的解决方案,它将处理卡之间的交互(在前面滑动背景卡)。您可以在这里查看卡和管理器的实现,其中包括拖动、移动背景卡和还原动画的实现。 试试这个: 通过旋转,您可以在这里找到更好的解决方案。参见DraggableView.m
查看此Swift 4库 让panGestureRecognizer=UIPanGestureRecognizer(目标:self,操作:#选择器(self.beingDraged)) AddgestureRecognitor(PangestureRecognitor) 正在拖动func(ugestureRecognitor:UIPangestureRecognitor){ 希望这能奏效。让我知道
谢谢改用
UIPangestureRecognitizer
并将您自己添加为其代理。使用代理方法跟踪触摸并做出相应的响应。您可以参考此库:在swift4中也参考此库。更多描述是否更适合新手…我如何开始制作?当然,我今晚会这样做。H希望有帮助
@IBAction func Arrastei(sender: UIPanGestureRecognizer) {
var origem = CGPoint(x: 0, y: 0)
var translation : CGPoint = sender.translationInView(Imagem)
var txy : CGAffineTransform = CGAffineTransformMakeTranslation(translation.x, -abs(translation.x) / 15)
var rot : CGAffineTransform = CGAffineTransformMakeRotation(-translation.x / 1500)
var t : CGAffineTransform = CGAffineTransformConcat(rot, txy);
Imagem.transform = t
if (translation.x > 100) {
LbResultado.textColor = btVerdadeiro.textColor
LbResultado.text = btVerdadeiro.text
LbResultado.hidden = false
} else {
if (translation.x < -100) {
LbResultado.textColor = btFalso.textColor
LbResultado.text = btFalso.text
LbResultado.hidden = false
} else {
LbResultado.hidden = true
}
}
if sender.state == UIGestureRecognizerState.Ended {
if (translation.x > 100) {
objJogo.Rodada_Vigente!.Responder(true)
} else {
if (translation.x < -100) {
objJogo.Rodada_Vigente!.Responder(false)
} else {
sender.view.transform = CGAffineTransformMakeTranslation(origem.x, origem.y)
sender.view.transform = CGAffineTransformMakeRotation(0)
}
}
}
}
-(void)beingDragged:(UIPanGestureRecognizer *)gestureRecognizer
{
//%%% this extracts the coordinate data from your swipe movement. (i.e. How much did you move?)
xFromCenter = [gestureRecognizer translationInView:self].x; //%%% positive for right swipe, negative for left
yFromCenter = [gestureRecognizer translationInView:self].y; //%%% positive for up, negative for down
//%%% checks what state the gesture is in. (are you just starting, letting go, or in the middle of a swipe?)
switch (gestureRecognizer.state) {
//%%% just started swiping
case UIGestureRecognizerStateBegan:{
self.originalPoint = self.center;
break;
};
//%%% in the middle of a swipe
case UIGestureRecognizerStateChanged:{
//%%% dictates rotation (see ROTATION_MAX and ROTATION_STRENGTH for details)
CGFloat rotationStrength = MIN(xFromCenter / ROTATION_STRENGTH, ROTATION_MAX);
//%%% degree change in radians
CGFloat rotationAngel = (CGFloat) (ROTATION_ANGLE * rotationStrength);
//%%% amount the height changes when you move the card up to a certain point
CGFloat scale = MAX(1 - fabsf(rotationStrength) / SCALE_STRENGTH, SCALE_MAX);
//%%% move the object's center by center + gesture coordinate
self.center = CGPointMake(self.originalPoint.x + xFromCenter, self.originalPoint.y + yFromCenter);
//%%% rotate by certain amount
CGAffineTransform transform = CGAffineTransformMakeRotation(rotationAngel);
//%%% scale by certain amount
CGAffineTransform scaleTransform = CGAffineTransformScale(transform, scale, scale);
//%%% apply transformations
self.transform = scaleTransform;
[self updateOverlay:xFromCenter];
break;
};
//%%% let go of the card
case UIGestureRecognizerStateEnded: {
[self afterSwipeAction];
break;
};
case UIGestureRecognizerStatePossible:break;
case UIGestureRecognizerStateCancelled:break;
case UIGestureRecognizerStateFailed:break;
}
}
xFromCenter = gestureRecognizer.translation(in: self).x
yFromCenter = gestureRecognizer.translation(in: self).y
switch gestureRecognizer.state {
//%%% just started swiping
case .began:
originalPoint = self.center;
break;
//%%% in the middle of a swipe
case .changed:
let rotationStrength = min(xFromCenter / ROTATION_STRENGTH, ROTATION_MAX)
let rotationAngel = .pi/8 * rotationStrength
let scale = max(1 - fabs(rotationStrength) / SCALE_STRENGTH, SCALE_MAX)
center = CGPoint(x: originalPoint.x + xFromCenter, y: originalPoint.y + yFromCenter)
let transforms = CGAffineTransform(rotationAngle: rotationAngel)
let scaleTransform: CGAffineTransform = transforms.scaledBy(x: scale, y: scale)
self.transform = scaleTransform
updateOverlay(xFromCenter)
break;
case .ended:
afterSwipeAction()
break;
case .possible:break
case .cancelled:break
case .failed:break
}
}