iOS 上如何实现排除某个 view 的 mask 效果?

2014-01-31 15:23:10 +08:00
 xhacker
大概就是 Clear 那样,点击一个 row 之后其他部分都变暗,除了这个 row 还是亮的。

现有一个 table view,我也想实现点击一个 cell 后,除了这个 cell 的其他地方都变暗。试了以下两个方法,都不太理想。

1. 给其他所有 cell 上加一个 mask 层。但 iOS 7 现在 cell 之间有 separator,而且还有 inset,所以还要改 separator 的颜色和 inset,总之动画各种不舒服。而且卡。

2. 直接在 [UIApplication sharedApplication].keyWindow 上加上下两个 mask。但这样 cell 移动的时候 mask 没法随之移动,非常蛋疼。

大家有什么主意么?
4569 次点击
所在节点    iDev
18 条回复
i0xbean
2014-01-31 15:59:47 +08:00
点击 cell 触发建立一个新的 window 过渡到上层,新 window 中有个『假 cell』处理后续操作。
xhacker
2014-01-31 16:12:35 +08:00
@i0xbean: 我想同时实现在点击 cell 的时候把 cell 滚动到最上面,有什么好办法能让「假 cell」随之移动么?
alexrezit
2014-01-31 16:27:10 +08:00
我觉得亮的 cell 不是原来的 cell 吧...
xhacker
2014-01-31 17:27:38 +08:00
@alexrezit: 如果是另外的 view,怎么能和 cell 非常好地同步滚到上面呢…
alexrezit
2014-01-31 17:34:24 +08:00
@xhacker
不知道, 我都不记得 table view 怎么操作了. 自己写一个 transition 试试?
icyalala
2014-01-31 17:35:50 +08:00
直接加到tableView上不行吗?
PrideChung
2014-01-31 18:05:56 +08:00
方案2,cell移动的时候调整mask不就行了
so898
2014-01-31 22:06:11 +08:00
给UITableView加Mask啊,然后把UITabbar和UINavigationBar的mask也都加上不就完了……
cameo
2014-01-31 23:24:41 +08:00
方案1明显更自然。

cell有没有mask,作为cell的一个属性写进model里,要加mask时修改model值然后[tableView reloadData]完事。各种卡很有可能是你的实现有问题,比如cell没做好复用。

方案2仅仅从表现层做hack来实现,完全没有深入问题在model层次的本质,为了解决问题而解决问题,是非常糟糕的设计。
xhacker
2014-02-01 15:17:35 +08:00
@so898: 怎么让某个 cell 不被 mask?
xhacker
2014-02-01 15:20:00 +08:00
@cameo: cell 加上 mask,separator 的颜色还是不变的。而且 separator 的颜色好像不能在 animation block 里调整。我想要一个逐渐变黑的过程。
xhacker
2014-02-01 15:22:51 +08:00
@icyalala: 怎么让某个 cell 不被 mask?
@PrideChung: 怎么能动态监视 cell 的位置?
so898
2014-02-01 16:18:17 +08:00
@xhacker 算高度……这种破事我经常干……
xhacker
2014-02-01 16:26:27 +08:00
@so898: 那怎么跟着 cell 滚啊= =
PrideChung
2014-02-01 17:45:21 +08:00
xhacker
2014-02-01 17:58:02 +08:00
@PrideChung: 我用 scrollToRowAtIndexPath:atScrollPosition:animated: 来把 row 滚动到最上面,不会调 scrollViewDidScroll:。
so898
2014-02-01 18:49:05 +08:00
@xhacker 你把它添加到UITablView上面了,自然会跟着滚的啊
xhacker
2014-02-02 09:20:37 +08:00
@so898: 有道理……我试试看。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/98752

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX