1

サイクルFOR内にオブジェクトを追加しますUIScrollViewが、2回目の対話の後、変更のインデックスを追加しますsubviews

私が作成するときScrollView

scroll.subviews :(
"<UIImageView: 0x147aeee0; frame = (1017 186; 7 5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x147aef50>>",
"<UIImageView: 0x147aefa0; frame = (1019 184; 5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x147af010>>"

)。

私がサイクルを持った後[scroll addSubview:btn];

初め

scroll.subviews :(
"<UIImageView: 0x147aeee0; frame = (1017 186; 7 5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x147aef50>>",
"<UIImageView: 0x147aefa0; frame = (1019 184; 5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x147af010>>",
"<ContentButton: 0x13fdc610; baseClass = UIButton; frame = (15 10; 221 173); opaque = NO; tag = 1; layer = <CALayer: 0x1034cc00>>"

)。

2番目(最後のオブジェクトをインデックス0に変更

scroll.subviews :(
"<ContentButton: 0x13fdc610; baseClass = UIButton; frame = (15 10; 221 173); opaque = NO; tag = 1; layer = <CALayer: 0x1034cc00>>",
"<UIImageView: 0x147aefa0; frame = (1019 184; 5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x147af010>>",
"<UIImageView: 0x147aeee0; frame = (1017 186; 7 5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x147aef50>>",
"<ContentButton: 0x105ddf70; baseClass = UIButton; frame = (246 10; 221 173); opaque = NO; tag = 149; layer = <CALayer: 0x105523e0>>"

)。

3番目以降、オブジェクトは通常どおり(最後のインデックスに)追加されます

scroll.subviews :(
"<ContentButton: 0x13fdc610; baseClass = UIButton; frame = (15 10; 221 173); opaque = NO; tag = 1; layer = <CALayer: 0x1034cc00>>",
"<UIImageView: 0x147aefa0; frame = (1019 184; 5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x147af010>>",
"<UIImageView: 0x147aeee0; frame = (1017 186; 7 5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x147aef50>>",
"<ContentButton: 0x105ddf70; baseClass = UIButton; frame = (246 10; 221 173); opaque = NO; tag = 149; layer = <CALayer: 0x105523e0>>",
"<ContentButton: 0x13f1dc80; baseClass = UIButton; frame = (477 10; 221 173); opaque = NO; tag = 3; layer = <CALayer: 0x13f1dd20>>"

)。

問題は2番目の相互作用にあるのに、なぜ最後のオブジェクト(ContentButton)がインデックス2にあり、インデックス0に変更されたのでしょうか。

for (obj * objScroll in arrayChaObj)
    {                
        // UIButton
        ContentButton * btn = [[ContentButton alloc] initWithFrame:CGRectMake(btContentPosXChaObj,
                                                                    10,
                                                                    imgButtonScroll.size.width,
                                                                    imgButtonScroll.size.height)];

        btContentPosXChaObj += 10 + imgButtonScroll.size.width;
        [scroll addSubview:btn];

        NSLog(@"scroll.subviews :%@",scroll.subviews);
        [scroll setContentSize:CGSizeMake(btContentPosXChaObj, imgButtonScroll.size.height+10)];
    }
4

1 に答える 1

1

これはただの勝手な推測です。

setContentSize:初めて電話をかけたときはどうなりますか?2 つの画像ビューはコンテンツ領域の外に出てしまいます。それらは決して表示されません。

次に、スクロールビューがサブビューの順序を最適化し、非表示のビューを最後に配置すると、おそらくクリッピング (再描画) 機能が改善されると思います。

現在、これを確認して実験する時間はありませんが、私にとっては合理的な説明です。

于 2013-01-09T16:46:50.083 に答える