UIImageView实现图片移动,缩放、旋转的代码片段
2011-11-04 15:12 张智清 阅读(3574) 评论(0) 编辑 收藏 举报继承UIImageView,重写init函数。
1 //旋转手势
2 UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer allor]initWithTarget:selft action:@selector(rotatePiece:)];
3 [self addGestureRecognizer:rotationGesture];
4 [rotationGesture release];
5
6 //放大缩小手势
7 UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(scalePiece:)];
8 [pinchGesture setDelegate:self];
9 [self addGestureRecognizer:pinchGesture];
10 [pinchGesture release];
1 - (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
2 if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
3 UIView *piece = gestureRecognizer.view;
4 CGPoint locationInView = [gestureRecognizer locationInView:piece];
5 CGPoint locationInSuperview = [gestureRecognizer locationInView:piece.superview];
6
7 piece.layer.anchorPoint = CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height);
8 piece.center = locationInSuperview;
9 }
10 }
11
12 - (void)rotatePiece:(UIRotationGestureRecognizer *)gestureRecognizer
13 {
14 [self adjustAnchorPointForGestureRecognizer:gestureRecognizer];
15
16 if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
17 [gestureRecognizer view].transform = CGAffineTransformRotate([[gestureRecognizer view] transform], [gestureRecognizer rotation]);
18 rotate = [gestureRecognizer rotation];
19 isMoveState = NO;
20 [gestureRecognizer setRotation:0];
21 }
22 }
23
24 - (void)scalePiece:(UIPinchGestureRecognizer *)gestureRecognizer
25 {
26 [self adjustAnchorPointForGestureRecognizer:gestureRecognizer];
27
28 if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
29 [gestureRecognizer view].transform = CGAffineTransformScale([[gestureRecognizer view] transform], [gestureRecognizer scale], [gestureRecognizer scale]);
30 scale = [gestureRecognizer scale];
31 isMoveState = NO;
32 [gestureRecognizer setScale:1];
33 }
34 }
35
36 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
37 {
38 if (gestureRecognizer.view != self.view)
39 return NO;
40
41 if (gestureRecognizer.view != otherGestureRecognizer.view)
42 return NO;
43
44 if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] || [otherGestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]])
45 return NO;
46
47 return YES;
48 }
//移动方法,仍是继承UIImageView重写Touch
initialPoint为全局CGPoint
1 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
2
3 UITouch *touch = [touches anyObject];
4
5 if ([touch tapCount] == 1)
6 {
7 CGPoint currentPoint = [touch locationInView:self];
8
9 if (isOne)
10 {
11 initialPoint = currentPoint;
12 isOne = NO;
13 }
14 CGFloat offsetX = currentPoint.x + self.frame.origin.x - initialPoint.x;
15 CGFloat offsetY = currentPoint.y + self.frame.origin.y - initialPoint.y;
16 self.frame = CGRectMake(offsetX, offsetY, self.frame.size.width, self.frame.size.height);
17 }
18 }
19
20 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
21
22 initialPoint = CGPointMake(0, 0);
23 isOne = YES;
24 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架