您的位置:首页 > 移动开发 > IOS开发

iOS学习,手势识别,storyboard简化版

2014-06-20 11:44 211 查看

写在前面

刚开始学习iOS开发,在此过程中学习到很多知识点,写这些的目的,首先是为了给像我一样的小白提供一些参考资料,其次是对自己所学知识的一个总结与记录。

废话不多说,下面开始。

闲来无事,在storyboard中看到几个没用过的控件,这几个控件都是一类,看名字应该都是手势。
storyboard给我的感觉就是简化代码,既然在storyboard中有了gesture的控件,那么做一些手势识别的事情是不是更简单呢?还是先查了资料,发现有个外国大神已经介绍很清晰了,同时还有中文版的,在此,对这些翻译组的同学表示感谢。给一个传送门:
原文:http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more
中文:/article/1423065.html

PS:就因为带了个图,一直显示文章是:待审核。这打击我后续更新的积极性啊。算了,其他方法都类似,大家command点击进去也能一探究竟,我就暂时不更新了。等有时间,把后面一次整理还,一次发布一下。

都介绍这么清晰了,我为啥还写呢(不是刷数据啊)?
因为我觉得其中有些步骤还可以简化,为啥大神没提,没深究,可能当时的版本原因。在storyboard中,最喜欢干的事情就是托线,我就将gesture的托线进行到底,因为刚看了第一个手势识别--拖动,我就先写这个,后续还有更新。
我觉得控制gesture和控制button等控件一样,可以简化为三部:
1,托一个控件到viewController
2,连线到.h或者.m(匿名)
3,实现托线时的方法(如果是action)

准备工作

不用导入框架、库。至少在我这里,不导入也能实现基本功能。

正式开始

Pan Gesture Recognizer---拖动

1.创建一个工程。进入storyboard,给默认的viewController中托如一个imageView,然后从外面导入一个照片,在imageView的image属性中设置导入的照片。这步简单,不多解释。
2.找到Pan Gesture Recognizer



把这个控件拖到imageView上。这时候,你会发现左侧Document Outline中,viewController下多了一个gesture。
3.把编辑视图选为 show Assistant Editor ,就是视图选择那三个按钮的中间那个,点了后能左右对称打开两个editor。左边为storyboard,右边为viewController的.h 或者 .m。
之后像平时托线一样,把document Outline中的gesture那个图标托线到.h或者.m上,跟平时一样了,可以选outlet或者action,测试下,选action,输入名字,id type用gesture的,之后在.m中实现方法。
4.我的测试方法跟上面参考文中的方法一样,就是拖动那个image,直接看原文代码也可以,不过我还是提供了我的代码。
- (IBAction)changePosition:(UIPanGestureRecognizer *)sender {
CGPoint changedPosition = [sender translationInView:self.view];
sender.view.center = CGPointMake(sender.view.center.x + changedPosition.x, sender.view.center.y + changedPosition.y);
[sender setTranslation:CGPointMake(0, 0) inView:self.view];
}
UIPanGestureRecognizer类有一个translationInView:方法,返回一个CGPoint,这个点就是用户托东西结束时候的变化的位置,就是位置改变量,里面的x,y就是对应的位置改变的坐标分量。 传入的参数,就是在那个view范围执行Pan,拖动,为了坐标的获取。
sender.view.center,感觉UIPanGestureRecognizer像一个容器,里面就是持有此gestrue的view,代码中就是那个imageView,然后对imageView的center进行修改达到图形移动的目的。
最后要对translation置零,不然每次获取的位移改变都是矢量递增的。比如原来位置是(10,10),移动到(10,50)---向右移动40,translation是(0,40),如果不清零,当再次移动到(10,60)--向右移动10,按我们的逻辑,这时再调用此回调方法,translation应该是(0,10),但是如果我们不清零,translation会是(0,60),随意第二次你滑动的距离比第一次的距离短,但是图片向右移动更多。

5.在storyboard中选中imageView,选择允许与用户交互:User interaction enabled。相信很多人都用过,我就不截图了。
点击运行,试试吧。
--------------------------------------------------------------------------------------------------------------

Pinch Gesture Recognizer---两指头捏合

如果上面的方法你完全掌握了,这不用看你也会用。在上面基础上:
1.storyboard中,托一个Pinch Gesture Recognizer还是到那个imageView上,左侧document outline又多了一个gesture,是pinch的,然后打开双列editor
2.托线这个pinch到.h或者.m,选action,起名字,type用gesture的
3.实现方法,这个是两指头捏合

同理,我还是提供了下我的代码,和大神的一样,方便大家加深印象(其实是我懒)
- (IBAction)changeScale:(UIPinchGestureRecognizer *)sender {
sender.view.transform = CGAffineTransformScale(sender.view.transform, sender.scale, sender.scale);
sender.scale = 1;
}


这比上面那个还简单,因为苹果直接封装了形变控制,就是那个transform,所以代码简单,两行。
PinchGestureRecognizer类里有scale,(因为Pinch是俩指头缩放,缩放肯定会有缩放的程度,就用scale来代表)直接赋值到CGAffineTransformScale方法中。
如果没记错(如果错了,欢迎大家指正)第一个参数是原transform,第二个参数是x放大,第三个参数是y放大。
同PanGestureRecognizer,这个scale用完也要进行修改,不然它就把上一次的scale保存到transform中,下次你调用时候,第一个参数输入transform,里面的scale就是上次的scale,会造成你控件成倍放大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: