UIGestureRecognizer的混合使用
来源:互联网 发布:淘宝代运营托管 编辑:程序博客网 时间:2024/05/16 12:42
最近在处理一些iOS相关的手势,早期的用法是使用UIView自带的一些touch事件:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
然后计算点击了哪里,手指移动的方向等等,最后计算出图片平移的位置,旋转的角度,放缩的程度。
好吧,这种方法简直是太弱了。
最方便的处理手势的方法是使用UIGestureRecognizer相关类:
UITapGestureRecognizer
UIPinchGestureRecognizer
UIRotationGestureRecognizer
UISwipeGestureRecognizer
UIPanGestureRecognizer
UILongPressGestureRecognizer
分别处理点击,放缩,旋转,滑动,拖动和长按。
这些类都很容易使用,但今天我遇到了一个问题,就是能不能让一个界面同时响应放缩,旋转,滑动这三个不同的动作呢。
答案是肯定的,具体的做法就是将self设置为上面类对象的delegate,然后实现代理方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer
{
returnYES;
}
这样就可以同时响应了。
但还有一个问题,就是界面的跟着变化呢?
下面是具体实现:
- (void)twoFingerPan:(UIGestureRecognizer *)gestureRecognizer
{
switch (gestureRecognizer.state)
{
caseUIGestureRecognizerStateChanged:
{
_point = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:self.view];
_scrollView.transform = CGAffineTransformMake(cosf(_rotation) * _scale, sinf(_rotation) * _scale, -sinf(_rotation) * _scale, cosf(_rotation) * _scale, _point.x, _point.y);
}
break;
default:
break;
}
}
- (void)twoFingerRotation:(UIGestureRecognizer *)gestureRecognizer
{
switch (gestureRecognizer.state)
{
caseUIGestureRecognizerStateChanged:
{
_rotation = [(UIRotationGestureRecognizer *)gestureRecognizer rotation];
_scrollView.transform = CGAffineTransformMake(cosf(_rotation) * _scale, sinf(_rotation) * _scale, -sinf(_rotation) * _scale, cosf(_rotation) * _scale, _point.x, _point.y);
}
break;
default:
break;
}
}
- (void)twoFingerPinch:(UIGestureRecognizer *)gestureRecognizer
{
switch (gestureRecognizer.state)
{
caseUIGestureRecognizerStateChanged:
{
_scale = [(UIPinchGestureRecognizer *)gestureRecognizer scale];
_scrollView.transform = CGAffineTransformMake(cosf(_rotation) * _scale, sinf(_rotation) * _scale, -sinf(_rotation) * _scale, cosf(_rotation) * _scale, _point.x, _point.y);
}
break;
default:
break;
}
- UIGestureRecognizer的混合使用
- iOS UIGestureRecognizer的使用
- UIGestureRecognizer使用
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 常州隆胸整形医院哪家好
- 添加用户为sudoer
- 【学习笔记----数据结构14-图】
- Tomcat 6.0/webapps/项目名/WEB-INF/classes下为空 .
- gcc命令行详解
- UIGestureRecognizer的混合使用
- 开源代码软件及开源代码许可证的法律特征研究
- 将多页PDF文件转换为多张JPG图片
- 远程桌面连接技巧--与主机拷贝文本及拷贝文件
- 第十一周项目四:特殊三位数
- 动态规划
- HEVC
- Bitmap位图渲染与操作(图片移动,放大,缩小,旋转,镜像发转)
- Dex Loader] Unable to execute dex: Multiple dex files解决办法