2011-05-08 61 views
0

好吧所以我有一个子类UIScrollView,里面有一些子视图,当设备的方向发生变化时我想更新子视图的位置,使它们适合新的方向。在不更新滚动条的情况下更新UIScrollView的子视图

当我刚刚更新子视图的位置,然后去滚动我注意到滚动手柄是巨大的...我的循环遍历所有的子视图和更新他们的框架也设置滚动手柄的框架...

因此,为了解决这个问题..每当我添加子视图,我设置了一个标签。当方向改变时,我在我的设置框架周围有一个条件,它检查视图上的标签是否与我添加的子视图匹配。如果是,则设置帧...

int i = 0; 

for (UIView *gridViewItem in self.subviews) { 

    if (gridViewItem.tag == GRID_CELL) { 
     gridViewItem.frame = [self calculateCellPosition:i]; 
    } 

    i++; 

} 

但现在我想检测在子视图触摸,我能想到这样做的最简单的方法是使用标签属性,所以我知道这是子视图被窃听......然而,标签是目前正在使用,以帮助我从其他子视图区分滚动柄...

当我登出我的UIScrollView的我得到这个子视图:

2011-05-08 16:07:56.266 XXXXXX[2096:207] (
"<UIView: 0x5a0d3f0; frame = (16 16; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a09250>>", 
"<UIView: 0x5a19d70; frame = (167 16; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a17660>>", 
"<UIView: 0x5a1d4f0; frame = (16 137; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a1d520>>", 
"<UIView: 0x5a1e300; frame = (167 137; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a1e330>>", 
"<UIView: 0x5a1e4f0; frame = (16 258; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a1e520>>", 
"<UIView: 0x5a1f320; frame = (167 258; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a1f350>>", 
"<UIView: 0x5a20120; frame = (16 379; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a20150>>", 
"<UIView: 0x5a20fb0; frame = (167 379; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a20fe0>>", 
"<UIView: 0x5a21dd0; frame = (16 500; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a21e00>>", 
"<UIView: 0x5a22bb0; frame = (167 500; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a22be0>>", 
"<UIView: 0x5a239a0; frame = (16 621; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a239d0>>", 
"<UIView: 0x5a247b0; frame = (167 621; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a247e0>>", 
"<UIView: 0x5a20f30; frame = (16 742; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a20f80>>", 
"<UIView: 0x5a26460; frame = (167 742; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a26490>>", 
"<UIView: 0x5a27220; frame = (16 863; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a27250>>", 
"<UIView: 0x5a20dd0; frame = (167 863; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a28080>>", 
"<UIView: 0x5a28e60; frame = (16 984; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a28e90>>", 
"<UIView: 0x5a29c50; frame = (167 984; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a29c80>>", 
"<UIView: 0x5a2aa60; frame = (16 1105; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a2aa90>>", 
"<UIView: 0x5a2b870; frame = (167 1105; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a2b8a0>>", 
"<UIView: 0x5a255a0; frame = (16 1226; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a255f0>>", 
"<UIView: 0x5a262f0; frame = (167 1226; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a2d610>>", 
"<UIView: 0x5a2e3c0; frame = (16 1347; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a2e3f0>>", 
"<UIView: 0x5a2f1d0; frame = (167 1347; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a2f200>>", 
"<UIView: 0x5a2ffc0; frame = (16 1468; 135 105); clipsToBounds = YES; tag = 1; layer = <CALayer: 0x5a2fff0>>" 

所有的子视图都有我的标签!我看不到滚动手柄?有没有人知道一种方法来识别滚动手柄,而不使用像我这样的标签?

您的帮助将非常感谢!谢谢!

回答

1

我可能不会为此分类UIScrollView。将一个UIView添加到UIScrollView并将您的单元格添加到该视图。然后总是以这种观点来工作。不需要标签,不会干扰UIScrollView的内部工作。只要内容视图的大小反映了其中的单元格,滚动就应该可以工作。

+0

哦,没错,这是有道理的。我会尽力的,非常感谢! – 2011-05-08 18:08:12

相关问题