利用swift实现微信cell左右滑动效果

教你轻松实现类似于微信的左右拖动效果,用swift进行代码编写,快来和小菜鸟一起研究这种效果的教程吧。将使用图文来进行展示


1、效果图

2、创建项目总览图

3、视图文件ViewController.swift文件源码

//
//  ViewController.swift
//  WBweixinCell
//
//  Created by wangBin on 15/10/22.
//  Copyright ? 2015年 WB. All rights reserved.
//

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    override func viewDidLoad() {
        super.viewDidLoad()
       
        let tableView=UITableView(frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height))
        tableView.delegate=self
        tableView.dataSource=self
        tableView.separatorStyle=UITableViewCellSeparatorStyle.SingleLineEtched
        self.view.addSubview(tableView)
        
        
    }
    
    
    
   func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat{
        
        return 100.0;
   }
    

   func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
   {
    
       return 5;
    
    
   }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
    
        let cellIndentifier:String="cellIndenttifier"
        let cell=WBTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellIndentifier)
        cell.selectionStyle=UITableViewCellSelectionStyle.None
        cell.userInteractionEnabled=true


        return cell;
        

    }
    
    
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
    {
    
    
    }

}
复制代码

4、自定义cell,WBTableViewController.swift文件源码

//
//  WBTableViewCell.swift
//  WBweixinCell
//
//  Created by WB on 15/10/22.
//  Copyright ? 2015年 WB. All rights reserved.
//

import UIKit

class WBTableViewCell: UITableViewCell{

    
    var View1=UIView(frame: CGRectMake(0, 0,0, 0))
    var View2=UIView(frame: CGRectMake(0, 0,0, 0))
    var View3=UIView(frame: CGRectMake(0, 0,0, 0))
    let panGesture =  UIPanGestureRecognizer(target: nil, action: "ViewPan:")
    
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        
        super.init(style: style, reuseIdentifier: reuseIdentifier)
       
        self.backgroundColor=UIColor.grayColor()
       
        
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
   
    
    
    //MARK:布局视图
    override func layoutSubviews() {
        
        
        View1.backgroundColor=UIColor.yellowColor()
        self.addSubview(View1)
        View1.frame = CGRectMake(self.frame.size.width-90, 0,90, self.frame.size.height-1)

        
        View2.backgroundColor=UIColor.greenColor()
        self.addSubview(View2)
        View2.frame = CGRectMake(self.frame.size.width-180, 0,90, self.frame.size.height-1)
        
        
        View3.backgroundColor=UIColor.orangeColor()
        panGesture.addTarget(self, action: "ViewPan:")
        panGesture.delegate=self
        View3.frame = CGRectMake(0, 0,self.frame.size.width, self.frame.size.height-1)
        View3.addGestureRecognizer(panGesture)
        self.addSubview(View3)
        
    }
    
    
    var begainLeftPan:Bool=false
    
    
    //拖动开始判断是竖直拖动?
    override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool
    {
        let translation = panGesture.translationInView(self)
        if(fabs(translation.y) > fabs(translation.x))
        {
            
            return false
            
        }
        return true
    
    
    }
    
    
    //MARK:拖动手势
    func ViewPan(sender:UIPanGestureRecognizer){
    
        let translation : CGPoint = sender.translationInView(self)
        
        
        if(sender.state == UIGestureRecognizerState.Began)
        {
            
            if(translation.x<0)
            {
                
                if(View3.center.x + translation.x < self.frame.size.width/2-180)
                {
                    return;
                    
                }
                begainLeftPan = true//确定视图是向左滑动
                View3.center=CGPointMake(View3.center.x + translation.x, View3.center.y )
                
            }
            else
            {
                if(View3.center.x + translation.x < self.frame.size.width/2)
                {
                    View3.center=CGPointMake(View3.center.x + translation.x, View3.center.y )
                    
                }
            
            
            }
        
        
        }
        
        if(sender.state == UIGestureRecognizerState.Changed)
        {
            if(begainLeftPan)
            {
                
                if(translation.x < -180)//如果偏移量小于最小值,将视图固定最小值并停止继续滑动
                {
                   View3.center=CGPointMake(self.frame.size.width/2-180, View3.center.y )
            
                   return
                }
                
                if(View3.center.x < self.frame.size.width/2-180)//但是图位置最小值时停止继续滑动
                {
                    return
                
                }
                if(View3.center.x + translation.x < self.frame.size.width/2-180)//当位置不是最小值,但加上此次偏移量小于最小值,视图固定最小值否,则继续滑动
                {
                    
                    View3.center=CGPointMake(self.frame.size.width/2-180, View3.center.y )
                }
                else
                {
                   View3.center=CGPointMake(View3.center.x + translation.x, View3.center.y )
                
                }
                if(View3.center.x + translation.x > self.frame.size.width/2)
                {
                    View3.center=CGPointMake(self.frame.size.width/2, View3.center.y )
                    begainLeftPan = false
                    
                }
   
            }
        
        }
        if(sender.state == UIGestureRecognizerState.Ended)
        {
            
            if(View3.center.x + translation.x < self.frame.size.width/2-180)
            {
               begainLeftPan = false
            
            }
            
            if(View3.center.x + translation.x <= self.frame.size.width/2-90)
            {
                View3.center=CGPointMake(self.frame.size.width/2-180, View3.center.y )
                
            }
            else
            {
            
                View3.center=CGPointMake(self.frame.size.width/2, View3.center.y )
            
            }
            
            
            
        }
        
        sender.setTranslation(CGPointMake(0, 0), inView: self)
    
    }

}
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值