美文网首页
iOS-常用小技巧-02

iOS-常用小技巧-02

作者: Mr_Bob_ | 来源:发表于2016-06-12 18:32 被阅读50次
    1.控件的局部圆角问题

    如果遇到一个设置一个控件(button或者label),只要右边的两个角圆角,或者只要一个圆角。该怎么办呢。这就需要图层蒙版来帮助我们了

        CGRect rect = CGRectMake(0, 0, 100, 50);
        
        CGSize radio = CGSizeMake(5, 5);//圆角尺寸
        
        // 可以设置圆角的位置,根据你的需求而定
        UIRectCorner corner = UIRectCornerTopLeft|UIRectCornerTopRight;
        
        UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corner cornerRadii:radio];
        
        CAShapeLayer *masklayer = [[CAShapeLayer alloc]init];//创建shapelayer
        
        masklayer.frame = button.bounds;
        
        masklayer.path = path.CGPath;//设置路径
        
        button.layer.mask = masklayer;
    
    2.给TableView或者CollectionView的cell添加简单动画

    只要在willDisplayCell方法中对将要显示的cell做动画即可:

    • UITableViewCell:
     - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
        
        NSArray *array =  tableView.indexPathsForVisibleRows;
        NSIndexPath *firstIndexPath = array[0];
        //设置anchorPoint
        cell.layer.anchorPoint = CGPointMake(0, 0.5);
        //为了防止cell视图移动,重新把cell放回原来的位置
        cell.layer.position = CGPointMake(0, cell.layer.position.y);
        //设置cell 按照z轴旋转90度,注意是弧度
        if (firstIndexPath.row < indexPath.row) {
            cell.layer.transform = CATransform3DMakeRotation(M_PI_2, 0, 0, 1.0);
        }else{
            cell.layer.transform = CATransform3DMakeRotation(- M_PI_2, 0, 0, 1.0);
        }
        cell.alpha = 0.0;
        [UIView animateWithDuration:1 animations:^{
            cell.layer.transform = CATransform3DIdentity;
            cell.alpha = 1.0;
        }];
        
    }
    
    • UICollectionViewCell
    - (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath{
     
        if (indexPath.row % 2 != 0) {
            cell.transform = CGAffineTransformTranslate(cell.transform, kScreenWidth/2, 0);
        }else{
            cell.transform = CGAffineTransformTranslate(cell.transform, -kScreenWidth/2, 0);
        }
        cell.alpha = 0.0;
        [UIView animateWithDuration:0.7 animations:^{
            cell.transform = CGAffineTransformIdentity;
            cell.alpha = 1.0;
        } completion:^(BOOL finished) {
     
        }];
    }
    
    3.给UIView设置图片
        UIImage *image = [UIImage imageNamed:@"playing"];
        layerView.layer.contents = (__bridge id)image.CGImage;
        // 同样可以设置显示的图片范围,不过此处略有不同,这里的四个值均为0-1之间;对应的依然是写x,y,widt,height
        layerView.layer.contentsCenter = CGRectMake(0.25, 0.25, 0.5, 0.5);
    
    4.图片处理只拿到图片的一部分
        UIImage *image = [UIImage imageNamed:filename];
        CGImageRef imageRef = image.CGImage;
        CGRect rect = CGRectMake(origin.x, origin.y ,size.width, size.height);
        //这里的宽高是相对于图片的真实大小
        //比如你的图片是400x400的那么(0,0,400,400)就是图片的全尺寸,想取哪一部分就设置相应坐标即可
        CGImageRef imageRefRect = CGImageCreateWithImageInRect(imageRef, rect);
        UIImage *imageRect = [[UIImage alloc] initWithCGImage:imageRefRect];
    
    5.模态跳转的动画设置

    设置模态跳转的动画,系统提供了四种可供选择

        DetailViewController *detailVC = [[DetailViewController alloc]init];
        //UIModalTransitionStyleFlipHorizontal 翻转
        //UIModalTransitionStyleCoverVertical 底部滑出
        //UIModalTransitionStyleCrossDissolve 渐显
        //UIModalTransitionStylePartialCurl 翻页
        detailVC.modalTransitionStyle = UIModalTransitionStylePartialCurl;
        [self presentViewController:detailVC animated:YES completion:nil];
    
    6.侧滑手势返回

    iOS的侧滑返回手势有着很好的操作体验,不支持侧滑返回的应用绝对不是好应用。但是在开发过程中在自定义了返回按钮,或者某些webView,tableView等页面,侧滑返回手势失效,这时候就需要我们来进行设置一下了,可以在基类里面协商如下代码:
    记得要遵守代理

    @interface PDNavigationController () <UIGestureRecognizerDelegate>
    
    #pragma mark - <UIGestureRecognizerDelegate>
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.interactivePopGestureRecognizer.delegate = self;
    }
    /**
     *  手势识别器对象会调用这个代理方法来决定手势是否有效
     *
     *  @return YES : 手势有效, NO : 手势无效
     */
    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
    {
        // 手势何时有效 : 当导航控制器的子控制器个数 > 1就有效
        return self.childViewControllers.count > 1;
    }
    

    相关文章

      网友评论

          本文标题:iOS-常用小技巧-02

          本文链接:https://www.haomeiwen.com/subject/okgedttx.html