0

私のビューコントローラーには、ビューがほとんどありません。そのビューのフレームはすべて変数に依存しています

CGFloat borderWidth

これらのビューは次のように定義されます

sec1 = [[MSSectionView alloc]initWithFrame:CGRectMake(self.borderWidth, self.borderWidth,self.frame.size.width/2-(self.borderWidth*3/2),self.frame.size.height/2 - (self.borderWidth*3/2) ) ];

borderwidth別のクラスからの値を変更するときに、sec1 のフレームを変更したい。どうすればそれができますか?そんなこと知ってる

[sec1 setFrame:CGRectMake(self.borderWidth, self.borderWidth,self.frame.size.width/2-(self.borderWidth*3/2),self.frame.size.height/2 - (self.borderWidth*3/2) )];

フレームを変更しますが、多くの uiviews があります。したがって、この方法でそれらすべてにフレームを設定することはできません。

4

3 に答える 3

0

これを実現するには、for ループを 1 つ取り、すべてのフレームを変更します。

for(UIView *subview in yourview.subviews)
{
    // Here you can change your frames based on the condition
    //here you will get old frame value of subview so you can change by using the old frame values of all the subviews.
    [subview setFrame:CGRectMake(self.borderWidth, self.borderWidth,self.frame.size.width/2-(self.borderWidth*3/2),self.frame.size.height/2 - (self.borderWidth*3/2) )];
}
于 2013-05-20T05:40:29.710 に答える
0

KVOの使用を検討できます。あなたのクラスborderWidthで の変化を観察してください。sec1このように、borderWidthe変更すると、sec1それに応じてクラスを変更できます。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self addObserver:self forKeyPath:@"borderWidth" options:NSKeyValueObservingOptionNew context:&self->borderWidth];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (context == &self.borderWidth) {
        if ([keyPath isEqualToString:@"borderWidth"]) {
            // Calculate your subview's frame.
        }
    }
}
于 2013-05-20T06:40:29.513 に答える