iphone - 沿曲线滚动

标签 iphone ios ipad uitableview uiscrollview

我正在尝试获得沿弯曲路径滚动 uitableview 的效果。基本上它就像是屏幕一侧的一个凸起的 tableview,就好像它是一个大圆圈的一侧。我不想使用图形效果来扭曲 tableview,因为文本会变得更难阅读。

顶部和底部的项目比靠近中心的对象更靠近屏幕边缘。

最佳答案

这是我想出的。此处作为概念证明的非常粗略的演示。

首先,已经使用 IBOutlet 设置了与 myScrollView 的连接,并连接到 xib 中的 ScrollView 。 然后我在 viewDidLoad 中设置 ScrollView :

int scrollItems = 20;
viewSize = 120;
viewItems = [[NSMutableArray alloc] init];
[myScrollView setContentSize:CGSizeMake(myScrollView.frame.size.width, (viewSize*1.25)*scrollItems)];
for(int i = 0; i < scrollItems; i++){
    UIView *thisView = [[UIView alloc] initWithFrame:CGRectMake(myScrollView.frame.size.width/2, i*(viewSize*1.25), viewSize, viewSize)];
    [thisView setBackgroundColor:[UIColor blueColor]];  // spaced out blue squares
    [myScrollView addSubview:thisView];
    [viewItems addObject:thisView];
}
[myScrollView setDelegate:self];
[myScrollView setContentOffset:CGPointMake(0, 1)]; // to force initial items to curve

这会将项目与全局 NSMutableArray 一起放在 ScrollView 中。它们间隔均匀,并且 ScrollView 的大小适合它们。现在,这些项目大致在我的 ScrollView 的中心直线向下排列。为了给他们一条曲线,我们添加了以下方法:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
float start = [scrollView contentOffset].y;    
float height = scrollView.frame.size.height;
float end = start + height;  // change so it doesn't scoot views past the end

float viewOffset, viewTop;

int index = 0;
for(UIView *thisView in viewItems){
    viewTop = thisView.frame.origin.y+thisView.frame.size.height;
    if((viewTop>start)&&(thisView.frame.origin.y<end)){ // our visible range
        viewOffset = thisView.frame.origin.y - start;
        CGRect tempFrame = thisView.frame;
        tempFrame.origin.x = 90 - sin((viewOffset / height)*4)*80;
        thisView.frame = tempFrame;
        index++;
    }
}

这基本上是使用正弦波将可见范围内的每个项目移动适当的量。所以顶部和底部的项目几乎没有任何调整,而中心的项目则被推到最远的地方。就像半个正弦波转向侧面。

它实际上运行起来非常流畅,就像在我的第一代 iPad 上一样。我真的很喜欢它。一些加快速度的方法...准确计算内容区域中有哪些 View ,然后只触摸那些 View ,现在我正在从头到尾检查每个项目,这是一种浪费。预缓存 sin() 值也可能是值得的。另一件事是 scrollViewDidScroll 可以在同一位置更新 2 或 3 次,在没有可见变化时重做所有内容,因此很多详细项目可能经常无法刷新。

享受吧。

关于iphone - 沿曲线滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6237784/

相关文章:

iphone - 将 UIActionSheet 按钮与当前 IBAction 链接

ios - 在 Init 函数中检测设备方向

javascript - JSON.parse 不适用于 iPad safari

ios - 解析Twitter登录-选择哪个Twitter帐户

ios - 在单个 UITableView 中填充两种类型的 UITableViewCell

iphone - objective-c : Create arrays from first array based on value

ios - 我是否需要保留在闭包中引用的自动释放对象?

ios - 如何构建连续视差滚动/ Collection View ?

ios - 使用标签栏 Controller iPhone iOS5

iphone - Admob 测试设备未显示模拟器 udid