ios实现视图的拖拽、缩放、旋转

本文介绍了如何在iOS应用中实现视图的拖动、缩放和旋转功能,通过自定义View(SimpleView)的实现,详细讲解了相关交互逻辑和手势识别的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我写了一个View

SimpleView.h

//
//  SimpleView.h
//  Demo
//
//  Created by SimpleView on 2017/7/11.
//  Copyright © 2017年 SimpleView. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface SimpleView : UIView

@end

SimpleView.m

//
//  SimpleView.m
//  Demo
//
//  Created by SimpleView on 2017/7/11.
//  Copyright © 2017年 SimpleView. All rights reserved.
//

#import "SimpleView.h"

@implementation SimpleView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        // 拖动
        [self addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)]];
        // 缩放
        [self addGestureRecognizer:[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)]];
        // 旋转
        [self addGestureRecognizer:[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)]];
    }
    return self;
}

#pragma mark - 手势

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    // 如果父视图也实现了Pan手势,放到子视图后可能会造成子视图Pan手势失效,需要特殊处理一下
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && ![gestureRecognizer.view isEqual:self])
    {
        return NO;
    }
    return [super gestureRecognizerShouldBegin:gestureRecognizer];
}

- (void)panAction:(UIPanGestureRecognizer *)gestureRecognizer
{
    UIView *piece = [gestureRecognizer view];
    
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
        
        CGPoint translation = [gestureRecognizer translationInView:[piece superview]];
        
        piece.center = CGPointMake(piece.center.x + translation.x, piece.center.y + translation.y);
        
        [gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
    }
}

- (void)pinchAction:(UIPinchGestureRecognizer *)gestureRecognizer
{
    self.transform = CGAffineTransformScale(self.transform, gestureRecognizer.scale, gestureRecognizer.scale);
    gestureRecognizer.scale = 1.0f;
}

- (void)rotationAction:(UIRotationGestureRecognizer *)gestureRecognizer
{
    self.transform = CGAffineTransformRotate(self.transform, gestureRecognizer.rotation);
    gestureRecognizer.rotation = 0;
}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值