hibou 主界面自定义侧滑

本文介绍如何在iOS应用中使用UIPanGestureRecognizer实现视图的滑动效果,包括滑动开始、滑动过程和滑动结束的处理逻辑,以及如何通过手势识别器回调方法控制视图的位置和缩放动画。

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

给要侧滑的View添加UIPanGestureRecognizer


#pragma mark 手势识别器回调方法

- (void)dragView:(UIPanGestureRecognizer *)gesture{

    switch (gesture.state) {

        case UIGestureRecognizerStateBegan:

            [self startDrag];

            break;

            

        case UIGestureRecognizerStateEnded:

            [self endDrag];

            break;

        default:

            [self Draging:gesture];

            break;

    }

}


#pragma mark 开始拖动,记录下开始的x

- (void)startDrag{

    CGRect frame = _mainView.frame;

    _lastDownX = frame.origin.x;

}


#pragma mark 正在拖动,View跟着动

- (void)Draging:(UIPanGestureRecognizer *)gesture{

    CGFloat maxX = [UIScreen mainScreen].bounds.size.width * kSlideRatio;

    CGPoint transform = [gesture translationInView:_mainView];

    

    CGRect frame = _mainView.frame;

    frame.origin.x = _lastDownX + transform.x;

    

    if (frame.origin.x < 0) {   //不可以移动到屏幕左边去

        frame.origin.x = 0;

    }else if(frame.origin.x > maxX){

        frame.origin.x = maxX;  //限制移动的最右边

    }

    _mainView.frame = frame;

    

    // 设置界面scale动画

    CGFloat tx = frame.origin.x;

    if (tx < 0) {

        tx = 0;

    }

    CGFloat txScale = tx / _settingsViewController.view.frame.size.width;

    // imageview缩放

    double scale = kDefaultSettingScale + txScale * (1 - kDefaultSettingScale);

    if (scale > 1){

        scale = 1;

    }

    

    CGAffineTransform cgTransform = CGAffineTransformMakeScale(scale, scale);

    [_settingsViewController setAnimationScale:cgTransform];

}


#pragma mark 拖动结束,判断要往哪边滚动

- (void)endDrag{

    int maxX = [self getSettingRight];

    int currentX = _mainView.frame.origin.x;

    if (currentX < maxX * 0.5) {    //没到一半,回到左边

        currentX = 0;

    }else{      //回到右边

        currentX = maxX;

    }

    

    CGRect frame = _mainView.frame;

    frame.origin.x = currentX;

    [self scrollMainViewToFrame:frame withDuration:0.25];

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值