要求:
在iOS中,我希望在一行中显示字母表,这些字母可以从左向右滚动&使用滑动手势从右向左滚动。在中心,会有一个放大镜/圆圈一样的东西,显示放大版本的字母表目前在中心。这个较大的大小显示用户希望选择该字符。
下面的字符可以水平滚动,D会出现在一个圆圈/放大镜下,上面有一个大字体标记用户的选择。
A、B、C、、D、、E、F、G
这需要在iOS 8和Xcode 6中使用swift。我知道可可触摸也可能出现在图片中&我对此很满意。
发布于 2015-06-23 07:36:11
根据您需要的需求,使用UICollectionView。它类似于表视图,但更灵活。您可以浏览使用UICollectionView的苹果文档。
这里总结了UICollectionView:http://nshipster.com/uicollectionview/的优点
要实现放大功能,您可能需要使用UICollectionViewDelegate方法:
-layoutAttributesForElementsInRect:,
您可以在其中为rect中的单元格设置属性(例如,放大大小)。上面的链接也对此作了解释。
发布于 2015-06-23 04:40:42
你会想要把这些字母放在UIScrollView里。这涵盖了您的大部分需求。具体取决于您希望滚动的方式将决定您是否需要.pagingEnabled。至于放大镜,您可以实现类似于代码这里的东西。我非常肯定,您还需要在滚动视图.setNeedsDisplay中调用scrollViewDidScroll:。
编辑:
在评论中,一个问题被问到如何揭示所有的文本。有两种选择。
选项1:对于每个字符,可以将其添加到具有固定宽度并将其origin.x设置为前一个标签的CGRectGetMaxX()的新标签中。
选项2:您可以计算文本的宽度并将标签宽度设置为返回的值。我对斯威夫特还不太熟悉,所以我会把它写在目标C上。
CGSize maxSize = CGSizeMake(CGFLOAT_MAX, self.scrollView.bounds.size.height);
// if using label.text
CGFloat width = ceilf([self.label.text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.label.font} context:nil].size.width);
// if using label.attributedText
CGFloat width = ceilf([self.label.attributedText boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin context:nil].size.width);在ceilf()中包装宽度是很重要的,这样最后一个字符就不会从四舍五入中剪短。
发布于 2015-06-23 04:45:55
https://github.com/acoomans/iOS-MagnifyingGlass也许能帮上忙。
把这个放在你的滚动视图上就行了。
https://stackoverflow.com/questions/30993833
复制相似问题