1

私は配列をループして UIImageViews を追加しています。配列は何かに応じて異なる数を持っています。したがって、UIImageViews の量はさまざまです。私がする必要があるのは、それらをビューの中央に一列に並べることです。私が問題を抱えている計算を使用する必要があるコードを知っています。

    for (int i = 0; i < [_lettersArray count]; i++){

    UIImage* imageContainer = [UIImage imageNamed:@"container.png"];
            UIImageView *containerView = [[UIImageView alloc] initWithImage:imageContainer];
            containerView.frame = CGRectMake(???,120,imageContainer.size.width,imageContainer.size.height);
[self.view addSubview:containerView];
}
4

1 に答える 1

2
[self _layoutViews:self.imageViews inView:self.view];

- (void) _layoutViews:(NSArray *)views inView:(UIView *)contentView
{
    NSInteger overallWidth = 0;
    for ( UIView *view in views ) {
        overallWidth += view.frame.size.width;
    }

    CGSize contentSize = contentView.frame.size;
    CGFloat startOffset = (contentSize.width - overallWidth)/2.0;
    CGFloat offset = startOffset;
    for ( UIView *view in views ) {
        CGRect frame = view.frame;
        frame.origin.x = offset;
        frame.origin.y = (contentSize.height/2.0) - (frame.size.height/2.0);
        view.frame = frame;
        offset += view.frame.size.width;
    }
}

サンプルコードでは、次のようになります。

    CGFloat count = [_lettersArray count];
    NSMutableArray *imageViews = [[NSMutableArray alloc] initWithCapacity:count];
    for (int i = 0; i < [_lettersArray count]; i++) {
        UIImage *imageContainer = [UIImage imageNamed:@"container.png"];
        UIImageView *containerView = [[UIImageView alloc] initWithImage:imageContainer];
        containerView.frame = CGRectMake(0,120,imageContainer.size.width,imageContainer.size.height);
        [imageViews addObject:containerView];
        [self.view addSubview:containerView];
    }

    [self _horizontalCenterViews:imageViews inView:self.view];

    return YES;
}

- (void) _horizontalCenterViews:(NSArray *)views inView:(UIView *)contentView
{
    NSInteger overallWidth = 0;
    for ( UIView *view in views ) {
        overallWidth += view.frame.size.width;
    }

    CGSize contentSize = contentView.frame.size;
    CGFloat startOffset = (contentSize.width - overallWidth)/2.0;
    CGFloat offset = startOffset;
    for ( UIView *view in views ) {
        CGRect frame = view.frame;
        frame.origin.x = offset;
        view.frame = frame;
        offset += view.frame.size.width;
    }
}
于 2012-11-19T23:30:24.873 に答える