scrollViewDidEndScrollingAnimation和scrollViewDidEndDecelerating的区别

本文介绍了一个自定义 iOS TabBar 控制器的实现方案,通过点击顶部标题按钮来改变选中状态,并平滑地更新底部下划线的位置。同时,文章详细描述了如何在 UIScrollView 滚动结束时自动切换到相应的子视图控制器。
#pragma mark - 监听
/**
 *  点击了顶部的标题按钮
 */
- (void)titleClick:(XMGTitleButton *)titleButton
{
    // 修改按钮状态
    self.clickedTitleButton.selected = NO;
    titleButton.selected = YES;
    self.clickedTitleButton = titleButton;
     
    // 移除底部下划线
    [UIView animateWithDuration:0.25 animations:^{
        self.titleUnderlineView.width = titleButton.titleLabel.width;
        self.titleUnderlineView.centerX = titleButton.centerX;
    }];
     
    // 让scrollView滚动到对应的位置(不要去修改contentOffset的y值)
    CGPoint offset = self.scrollView.contentOffset;
    offset.x = titleButton.tag * self.scrollView.width;
    [self.scrollView setContentOffset:offset animated:YES];
   //不是人为拖拽scrollView导致滚动完毕,会调用scrollViewDidEndScrollingAnimation这个方法
}
 
#pragma mark - <UIScrollViewDelegate>
/**
 *  滚动完毕就会调用(如果不是人为拖拽scrollView导致滚动完毕,才会调用这个方法
 */
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
    int index = scrollView.contentOffset.x / scrollView.width;
    UIViewController *willShowChildVc = self.childViewControllers[index];
     
    // 如果这个子控制器的view已经添加过了,就直接返回
    if (willShowChildVc.isViewLoaded) return;
     
    // 添加子控制器的view
    willShowChildVc.view.frame = scrollView.bounds;
    [scrollView addSubview:willShowChildVc.view];
}
 
/**
 *  滚动完毕就会调用(如果是人为拖拽scrollView导致滚动完毕,才会调用这个方法
 */
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    int index = scrollView.contentOffset.x / scrollView.width;
    // 点击对应的按钮
    [self titleClick:self.titleButtons[index]];
     
    // 添加子控制器的view
    [self scrollViewDidEndScrollingAnimation:scrollView];
}
 
 
 

转载于:https://www.cnblogs.com/stevenwuzheng/p/5781186.html

在iOS中,你可以使用Swift或Objective-C来实现照片相册的旋转功能。这里我会给出一个简单的Swift示例,假设我们有一个UIImageView用于显示图片,并且支持手势控制旋转: ```swift import UIKit class PhotoAlbumViewController: UIViewController, UIScrollViewDelegate { // UIImageView实例 @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() // 设置scrollView的委托 scrollView.delegate = self // 添加pinch gesture recognizer let panGesture = UIPinchGestureRecognizer(target: self, action: #selector(handlePinchGesture(_:))) imageView.addGestureRecognizer(panGesture) } @objc func handlePinchGesture(_ gestureRecognizer: UIPinchGestureRecognizer) { if gestureRecognizer.state == .changed { let scale = gestureRecognizer.scale gestureRecognizer.scale = 1.0 // 恢复原始比例 switch gestureRecognizer.view?.tag { case imageView.tag: // 图片缩放 imageView.transform = CGAffineTransform(scaleX: scale, y: scale) default: break } } else if gestureRecognizer.state == .ended { gestureRecognizer.scale = 1.0 } } // 当用户尝试旋转时,阻止默认行为并处理旋转 func scrollViewWillBeginDragging(scrollView: UIScrollView) { scrollView.isPagingEnabled = false } func scrollViewDidEndDecelerating(scrollView: UIScrollView) { // 如果需要,可以在这儿保存当前的旋转角度或者调整布局 } // 监听滚动结束,恢复自动滚动 func scrollViewDidEndScrollingAnimation(scrollView: UIScrollView) { scrollView.isPagingEnabled = true } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值