我有一个集合视图,在集合视图中,我已经imageview
,我在UISwipeGestureRecognizer
上添加了imageview
,这工作正常。它进入了刷卡方法。在Swipe方法中,我试图翻转单元格上的imageview
,但它无效。
以下是我的澄清代码。
// collectionview delegate method in which I have added gesture.
internal func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
{
let reuseIdentifier = "cell" // also enter this string as the cell identifier in the storyboard
index = indexPath
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell
let imageNameString = self.items.objectAtIndex(indexPath.row) as! String
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swiped(_:))) // put : at the end of method name
swipeLeft.direction = UISwipeGestureRecognizerDirection.Left
cell.myImageView.addGestureRecognizer(swipeLeft)
cell.myImageView.userInteractionEnabled = true;
cell.myImageView.image = UIImage(named: imageNameString)
return cell;
}
// Swiped Method called when we swipe on imageview
func swiped(gesture: UIGestureRecognizer) {
let reuseIdentifier = "cell" // also enter this string as the cell identifier in the storyboard
let cell = self.myCollectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath:index ) as! MyCollectionViewCell
if let swipeGesture = gesture as? UISwipeGestureRecognizer
{
switch swipeGesture.direction {
case UISwipeGestureRecognizerDirection.Left :
print("User swiped left")
cell.updateCell()
self.myCollectionView.reloadData()
default:
break
}
}
}
当我们在单元格上滑动imageview
但是它没有翻转时,会调用更新单元格方法。如果我直接在UICollectionViewCell
中找到它,此代码工作正常。我为uicollectionviewcell
func updateCell()
{
UIView.transitionWithView(self.contentView, duration: 0.6, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: {
self.contentView.insertSubview(self.myImageView, aboveSubview: self.myImageView)
self.myImageView.image = UIImage (named: "wallpaper2")
}, completion: nil)
}
任何帮助将不胜感激。错误在哪里?
答案 0 :(得分:1)
终于找到了解决方案 -
//替换代码 -
func swiped(gesture: UIGestureRecognizer)
{
let reuseIdentifier = "cell" // also enter this string as the cell identifier in the storyboard
let cell = self.myCollectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath:index ) as! MyCollectionViewCell
....
}
//使用以下代码 -
func swiped(gesture: UIGestureRecognizer) {
let cell = self.myCollectionView.cellForItemAtIndexPath(index) as! MyCollectionViewCell
.....
}
如果有人面临同样的问题,我希望它有所帮助 感谢上述所有试图帮助找出解决方案的人。
答案 1 :(得分:0)
执行图像更新后,您正在调用集合视图以重新加载。
cell.updateCell()
self.myCollectionView.reloadData()
如果你没有“方式”'知道什么时候以前刷过一个细胞。 reloadData方法将加载单元格,因为它是第一次加载而没有应用任何更改。
<强>更新强>
但是稍后在向上/向下滚动后重新绘制单元格时,它应该会发生同样的问题。我建议将图片移动为UICollectionViewCell
自定义类的属性。还要在自定义类中添加一个布尔值,该类知道图像何时旋转。因此,只要你需要绘制单元格,就可以在自定义类中调用draw方法。
答案 2 :(得分:0)
如果您正在使用uicollectionviewcell的子类,则将手势识别器分配给awakeFromNib内的图像视图。还要将滑动功能写入自定义类。所以不需要在刷卡内再次出列