正在回答
定义一个CGFloat类型的变量lastScale用来保存上次放大或缩小的那个值。
然后实现scale方法,来获取当前scale的值,并设置view的缩放。
- (void)scale:(UIGestureRecogize *)gesure {
if([recognizer state] == UIGestureRecognizerStateBegan) {
lastScale = self.scale;
}
这样记录一下上次最后一次的值。
老师你好,感谢你的回复。实际上我的问题是:当缩放完成后,手指离开屏幕的时候,会响应什么样的事件或方法?或者缩放前,手指碰到屏幕后尚未开始缩放时,会响应什么事件或方法?
问题来由:
好比我们正在实现一个正方形图片的等比缩放。在一次缩放过程中,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。所以,我需要记住上一次缩放结束时的边长。
或者请问老师,类似这种功能的实现,会通过其他什么更好的途径吗?谢谢。
- 参与学习 1337 人
- 提交作业 712 份
- 解答问题 1878 个
很多人都在疑问没有基础该怎么学习iOS开发?不用担心,本路径采用游戏关卡式的教学模式,并且以经典OC与最新Swift双重结合的教学内容,帮助大家快速掌握两种iOS开发语言基础,去掉“零”标签。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星