项目介绍:
[Objective-C] 查看源文件 复制代码
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { if !self.isEdit { super.touchesBegan(touches, withEvent: event) return } let touch:CGPoint! = event?.allTouches()?.first?.locationInView(self); let flowLayout = self.collectionViewLayout as! EditFlowLayout for (item,attributes) in flowLayout.attributess.enumerate() { if CGRectContainsPoint(attributes.frame, touch) { self.moveItem = item self.fromIndexPath = NSIndexPath.init(forItem: self.moveItem!, inSection: 0) self.toIndexPath = NSIndexPath.init(forItem: self.moveItem!, inSection: 0) let indexPath = NSIndexPath.init(forItem: item, inSection: 0) let moveCell: CollectionViewCell = self.cellForItemAtIndexPath(indexPath) as! CollectionViewCell self.distanceX = touch.x - moveCell.center.x self.distanceY = touch.y - moveCell.center.y self.copyView = moveCell.mutableCopy() as? CollectionViewCell moveCell.superview?.addSubview(self.copyView!) //对cell进行处理,直接设置cell透明度不能达到效果 moveCell.backgroundColor = UIColor.clearColor() for view in moveCell.subviews { view.alpha = 0.0 } // moveCell.alpha = 0 } } } override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { if !self.isEdit { super.touchesMoved(touches, withEvent: event) return } let touch:CGPoint! = event?.allTouches()?.first?.locationInView(self); if let copyView = self.copyView { dispatch_async(dispatch_get_main_queue(), { copyView.center.x = touch.x - self.distanceX! copyView.center.y = touch.y - self.distanceY! }) let flowLayout = self.collectionViewLayout as! EditFlowLayout var number:Int! = 0 for (item,attributes) in flowLayout.attributess.enumerate() { number = number + 1 if item == self.moveItem { continue } let attributesWidth = attributes.bounds.size.width let attributesHeight = attributes.bounds.size.height let copyViewWidth = copyView.bounds.size.width let maxWidth = attributesWidth > copyViewWidth ? attributesWidth:copyViewWidth // let copyViewHeight = copyView.bounds.size.height if fabs(copyView.center.x - attributes.center.x) < (maxWidth - fabs(attributesWidth - copyViewWidth))/2 { if fabs(copyView.center.y - attributes.center.y) < attributesHeight/2 { self.fromIndexPath = NSIndexPath.init(forItem: self.moveItem!, inSection: 0) self.toIndexPath = NSIndexPath.init(forItem: item, inSection: 0) flowLayout.moveIndexPath = self.fromIndexPath if self.fromIndexPath?.item == self.toIndexPath?.item { return } dispatch_async(dispatch_get_global_queue(0, 0), { NSNotificationCenter.defaultCenter().postNotificationName(MoveCellNotificationName, object: nil, userInfo: ["fromIndexPath": self.fromIndexPath!,"toIndexPath": self.toIndexPath!]) }) self.moveItem = item; break } } } if number >= flowLayout.attributess.count { let desAttributes: UICollectionViewLayoutAttributes = flowLayout.attributess[number - 1] let moveCellMinX = self.copyView!.center.x - self.copyView!.bounds.size.width/2 let moveCellMinY = self.copyView!.center.y - self.copyView!.bounds.size.height/2 let desCellMinX = desAttributes.center.x - desAttributes.bounds.size.width/2 let desCellMaxY = desAttributes.center.y + desAttributes.bounds.size.height/2 // print("\(moveCellMinX)--\(moveCellMinY)--\(desCellMinX)--\(desCellMaxY)") if (moveCellMinX > desCellMinX && moveCellMinY > desCellMaxY) || moveCellMinY > desCellMaxY{ self.fromIndexPath = NSIndexPath.init(forItem: self.moveItem!, inSection: 0) self.toIndexPath = NSIndexPath.init(forItem: number - 1, inSection: 0) flowLayout.moveIndexPath = self.fromIndexPath if self.fromIndexPath?.item == self.toIndexPath?.item { return } dispatch_async(dispatch_get_global_queue(0, 0), { NSNotificationCenter.defaultCenter().postNotificationName(MoveCellNotificationName, object: nil, userInfo: ["fromIndexPath": self.fromIndexPath!,"toIndexPath": self.toIndexPath!]) }) self.moveItem = number - 1; } } } } override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { if !self.isEdit { super.touchesEnded(touches, withEvent: event) return } if let indexPath = self.toIndexPath { let cell:CollectionViewCell = self.cellForItemAtIndexPath(toIndexPath!) as! CollectionViewCell; let flowLayout = self.collectionViewLayout as! EditFlowLayout let attributes:UICollectionViewLayoutAttributes = flowLayout.attributess[toIndexPath!.item] UIView.animateWithDuration(0.3, animations: { self.copyView!.frame = attributes.frame }) { (completed) in //对cell进行处理,直接设置cell透明度不能达到效果 cell.backgroundColor = UIColor.redColor() for view in cell.subviews { view.alpha = 1.0 } // cell.alpha = 1.0 self.copyView!.removeFromSuperview() self.copyView = nil self.toIndexPath = nil self.fromIndexPath = nil flowLayout.moveIndexPath = nil; } } else { if let from = self.fromIndexPath { } else { return } let cell:CollectionViewCell = self.cellForItemAtIndexPath(fromIndexPath!) as! CollectionViewCell; let flowLayout = self.collectionViewLayout as! EditFlowLayout let attributes:UICollectionViewLayoutAttributes = flowLayout.attributess[fromIndexPath!.item] self.copyView!.frame = attributes.frame //对cell进行处理,直接设置cell透明度不能达到效果 cell.backgroundColor = UIColor.redColor() for view in cell.subviews { view.alpha = 1.0 } // cell.alpha = 1.0 self.copyView!.removeFromSuperview() self.copyView = nil self.toIndexPath = nil self.fromIndexPath = nil