在iOS中水平滚动字符,并在中间放大一个字符

在iOS中水平滚动字符,并在中间放大一个字符,ios,swift,cocoa-touch,xcode6,swipe-gesture,Ios,Swift,Cocoa Touch,Xcode6,Swipe Gesture,要求: 一排字母表 使用滑动手势,用户可以从左向右滑动字母表,反之亦然 中心有一个圆形/放大镜,用于放大中心的字符 在iOS中,我想在一行中显示字母,可以使用滑动手势从左到右&从右到左滚动。在中间,会有一个放大镜/圆圈状的东西,可以显示当前在中心的字母表的放大版本。这个较大的尺寸表示用户想要选择那个角色 例如:下面的字符可以水平滚动,D将出现在一个圆圈/放大镜下,用一个大字体标记用户的选择 A B CDE F G 需要在iOS 8和Xcode 6中使用swift。我知道cocoa touch

要求:

  • 一排字母表
  • 使用滑动手势,用户可以从左向右滑动字母表,反之亦然
  • 中心有一个圆形/放大镜,用于放大中心的字符
在iOS中,我想在一行中显示字母,可以使用滑动手势从左到右&从右到左滚动。在中间,会有一个放大镜/圆圈状的东西,可以显示当前在中心的字母表的放大版本。这个较大的尺寸表示用户想要选择那个角色

例如:下面的字符可以水平滚动,D将出现在一个圆圈/放大镜下,用一个大字体标记用户的选择

A B CDE F G


需要在iOS 8和Xcode 6中使用swift。我知道cocoa touch可能也会出现在图片中&我对它很满意

您会希望这些字母出现在
UIScrollView
中。这涵盖了您的大部分需求。根据您想要滚动的确切方式,将确定您是否想要滚动。至于放大镜,你可以实现类似代码的东西。我很确定,在滚动浏览期间,您还需要打电话

编辑:

评论中提出了一个问题,即如何披露所有文本。有两种选择

选项1:对于每个字符,您可以将其添加到具有固定宽度的新标签,并将其
origin.x
设置为上一个标签的
CGRectGetMaxX()

选项2:您可以计算文本的宽度,并将标签宽度设置为返回值。我对swift还不太熟悉,所以我将用Objective-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()
中包装宽度很重要,这样最后一个字符就不会因为四舍五入而被截断。

您会希望字母在
UIScrollView
中显示。这涵盖了您的大部分需求。根据您想要滚动的确切方式,将确定您是否想要滚动。至于放大镜,你可以实现类似代码的东西。我很确定,在滚动浏览期间,您还需要打电话

编辑:

评论中提出了一个问题,即如何披露所有文本。有两种选择

选项1:对于每个字符,您可以将其添加到具有固定宽度的新标签,并将其
origin.x
设置为上一个标签的
CGRectGetMaxX()

选项2:您可以计算文本的宽度,并将标签宽度设置为返回值。我对swift还不太熟悉,所以我将用Objective-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()
中包装宽度很重要,这样最后一个字符就不会因为舍入而被截断。

可能会有帮助

只需将其放在滚动视图的顶部。

可能会有所帮助


只需将其放在滚动视图的顶部。

根据需要,使用
UICollectionView
。它类似于表视图,但更灵活。您可以浏览有关使用
UICollectionView
s的苹果文档

以下是
UICollectionView
的优点摘要:

要实现放大功能,您可能需要使用
UICollectionViewDelegate
方法:

-layouttributesforementsinrect:


您可以在其中为该矩形内的单元格设置属性(例如,放大大小)。上面的链接也对此进行了解释。

根据需要,使用
UICollectionView
。它类似于表视图,但更灵活。您可以浏览有关使用
UICollectionView
s的苹果文档

以下是
UICollectionView
的优点摘要:

要实现放大功能,您可能需要使用
UICollectionViewDelegate
方法:

-layouttributesforementsinrect:


您可以在其中为该矩形内的单元格设置属性(例如,放大大小)。上面的链接也解释了这一点。

这不符合我的要求,因为无论用户点击哪里,它都会放大图像。我的是一个非常具体的要求这将不符合我的要求,因为它放大图像,无论用户点击。我的是一个非常具体的要求这是我做的:ViewController-ScrollView-View-Label-包含一个B C D等等…但是,在写了几个字符之后,我看到了…剩下的文本在模拟器中被剪切。我已将scrollview宽度设置为200&居中。我做得对吗?此外,我不确定TouchReader在您提供的链接中做了什么。您的文本正在被剪裁,因为您的标签没有扩展到文本的宽度。我会用代码更新我的答案。至于我发送的链接,触摸阅读器将在你用手指移动时重新绘制。你不需要这个代码。我就是这么做的:ViewController-ScrollView-View-Label-包含一个B-C-D等等…但是,在写了几个字符之后,我明白了…剩下的文本在模拟器中被剪切。我已将scrollview宽度设置为200&居中。我做得对吗?此外,我不确定TouchReader在您提供的链接中做了什么。您的文本正在被剪裁,因为您的标签没有扩展到文本的宽度。我会用代码更新我的答案。至于我发送的链接,触摸阅读器将在你用手指移动时重新绘制。你不需要这个代码。起初,我想使用
UICollectionView
,但我想在中间显示一个圆圈或正方形,这样当用户在中间滑动时,该字符会变大并描述用户的选择。因此,最初这个圆/正方形不在那里,但当用户滑动字符列表时,它应该出现&用户会知道这是选择框,您可以通过addi在中间添加视图