完成缩放手势

完成缩放手势

请问老师和同学,如何捕获完成一次缩放手势的那一刻?就是说,当我的两个手指贴着屏幕缩放后离开屏幕时,这一刻会触发什么事件?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

定义一个CGFloat类型的变量lastScale用来保存上次放大或缩小的那个值。

然后实现scale方法,来获取当前scale的值,并设置view的缩放。

- (void)scale:(UIGestureRecogize *)gesure {

if([recognizer state] == UIGestureRecognizerStateBegan)  {    
       lastScale = self.scale; 

}

这样记录一下上次最后一次的值。

  • 麦扣杨 提问者 #1
    非常感谢!
    2017-12-11 16:32:38
提问者 麦扣杨 2017-12-11 14:25:37

老师你好,感谢你的回复。实际上我的问题是:当缩放完成后,手指离开屏幕的时候,会响应什么样的事件或方法?或者缩放前,手指碰到屏幕后尚未开始缩放时,会响应什么事件或方法?

问题来由:

好比我们正在实现一个正方形图片的等比缩放。在一次缩放过程中,scale的值在1上下波动。假设正方形图片边长在缩放前是10,通过实现了缩放手势的方法,我们发现在这一次连续的缩放过程中(手指不离开屏幕),这个缩放手势方法会被连续触发,而每一次触发中会得到相应的scale值。我们假设scale值经过0.6f, 0.8f, 0.4f,那么,如果我们用每次缩放手势触发所得的scale值和当前图片边长相乘,得到的这个相应的尺寸的变化是:

scale = 0.6f,   边长 = 10 * 0.6f = 6

scale = 0.8f,   边长 = 6 * 0.8f = 4.8

scale = 0.4f,   边长 = 4.8 * 0.4f = 19.2

很明显,当scale从0.6到0.8变化的时候,我是在做放大手势,但是从实验数据来看,scale值是基于一开始的比例,因此图片还是在缩小。

因此,我发现我需要记住缩放前,或者缩放后的尺寸。然后每次缩放过程中,将scale和一个确定的值进行相乘,比如上述的尺寸变化:

scale = 0.6f,   边长 = 10 * 0.6f = 6

scale = 0.8f,   边长 = 10 * 0.8f = 8

scale = 0.4f,   边长 = 10 * 0.4f = 4

这样就正常地实现缩放了。但是问题是,当边长缩为4时,我将手指从屏幕离开,然后过一会再次触碰屏幕进行缩放,这时候我们拿来和scale相乘的原始边长,应该是上一次离开的时候的那个4。所以,我需要记住上一次缩放结束时的边长。

或者请问老师,类似这种功能的实现,会通过其他什么更好的途径吗?谢谢。

Tender10 2017-12-11 10:11:17

您好,您是想问的是怎么触发缩放手势是吗?在模拟器上按住option键之后,就会出现两个小光圈,然后你用鼠标进行旋转啊,缩放啊就可以触发对应的手势操作了。如果不是我回答的这个问题,你可以在描述一下你的问题哦。

  • 提问者 麦扣杨 #1
    老师你好,感谢你的回复。实际上我的问题是:当缩放完成后,手指离开屏幕的时候,会响应什么样的事件或方法?或者缩放前,手指碰到屏幕后尚未开始缩放时,会响应什么事件或方法? 问题来由: 好比我们正在实现一个正方形图片的等比缩放。在一次缩放过程中,scale的值在1上下波动。假设正方形图片边长在缩放前是10,通过实现了缩放手势的方法,我们发现在这一次连续的缩放过程中(手指不离开屏幕),这个缩放手势方法会被连续触发,而每一次触发中会得到相应的scale值。我们假设scale值经过0.6f, 0.8f, 0.4f,那么,如果我们用每次缩放手势触发所得的scale值和当前图片边长相乘,得到的这个相应的尺寸的变化是: scale = 0.6f, 边长 = 10 * 0.6f = 6 scale = 0.8f, 边长 = 6 * 0.8f = 4.8 scale = 0.4f, 边长 = 4.8 * 0.4f = 19.2 很明显,当scale从0.6到0.8变化的时候,我是在做放大手势,但是从实验数据来看,scale值是基于一开始的比例,因此图片还是在缩小。 因此,我发现我需要记住缩放前,或者缩放后的尺寸。然后每次缩放过程中,将scale和一个确定的值进行相乘,比如上述的尺寸变化: scale = 0.6f, 边长 = 10 * 0.6f = 6 scale = 0.8f, 边长 = 10 * 0.8f = 8 scale = 0.4f, 边长 = 10 * 0.4f = 4 这样就正常地实现缩放了。但是问题是,当边长缩为4时,我将手指从屏幕离开,然后过一会再次触碰屏幕进行缩放,这时候我们拿来和scale相乘的原始边长,应该是上一次离开的时候的那个4。所以,我需要记住上一次缩放结束时的边长。 或者请问老师,类似这种功能的实现,会通过其他什么更好的途径吗?谢谢。
    2017-12-11 14:26:23
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

iOS入门:基础语法与常用控件
  • 参与学习       1337    人
  • 提交作业       712    份
  • 解答问题       1878    个

很多人都在疑问没有基础该怎么学习iOS开发?不用担心,本路径采用游戏关卡式的教学模式,并且以经典OC与最新Swift双重结合的教学内容,帮助大家快速掌握两种iOS开发语言基础,去掉“零”标签。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师