0

受け取った機能のために非表示になる画像が連続したUIViewがあります。私は探し回っていますが、すべてを中央に配置するためにこれらのUIImageViewを再配置する方法が見つかりませんでした。

つまり、次の行がある場合です。

|X||X||X||X||X||X||X| 

表示したい2番目と5番目の要素を非表示にします

   |X||X||X||X||X|

しかし、私は得る

|X|   |X||X|   |X||X|

それを制御するUIViewプロパティはありますか、それとも手動で別のUIViewを作成したり、コードにプログラムで要素を追加したりする必要がありますか?現在、UIImageView要素の非表示のプロパティのみを使用しています。

前もって感謝します!

4

2 に答える 2

2

サイズについてはこれを試してみてください!;-)

ViewController.h

#define BUFFER 10
#define WIDTH 90
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (strong, nonatomic) NSMutableArray *ViewArray;
- (IBAction)hideViews:(id)sender;
- (void)centerVisibleViews;
@end

ViewController.m

#import "ViewController.h"
@implementation ViewController
@synthesize ViewArray;
- (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray *colorArray = [NSMutableArray array];
    [colorArray addObject:[UIColor redColor]];
    [colorArray addObject:[UIColor orangeColor]];
    [colorArray addObject:[UIColor yellowColor]];
    [colorArray addObject:[UIColor greenColor]];
    [colorArray addObject:[UIColor blueColor]];
    [colorArray addObject:[UIColor purpleColor]];
    [colorArray addObject:[UIColor blackColor]];
    [self setViewArray:[NSMutableArray array]];
    for (int i = 0; i < 7; i = i + 1) {
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(BUFFER + ((WIDTH + BUFFER) * i), BUFFER, WIDTH, WIDTH)];
        [view setBackgroundColor:[colorArray objectAtIndex:i]];
        [[self ViewArray] addObject:view];
        [[self view] addSubview:view];
    }
}
- (IBAction)hideViews:(id)sender {
    for (int i = 0; i < [[self ViewArray] count]; i = i + 1) {
        if (i == 1 || i == 4) {
            [(UIView *)[[self ViewArray] objectAtIndex:i] setHidden:YES];
        }
    }
    [self centerVisibleViews];
}
- (void)centerVisibleViews {
    int visibleViews = 0;
    for (int i = 0; i < [[self ViewArray] count]; i = i + 1) {
        if (![(UIView *)[[self ViewArray] objectAtIndex:i] isHidden]) {
            visibleViews = visibleViews + 1;
        }
    }
    float totalWidth = (BUFFER * 2) + (WIDTH * [[self ViewArray] count]) + (BUFFER * ([[self ViewArray] count] - 1));
    float visibleWidth = (BUFFER * 2) + (WIDTH * visibleViews) + (BUFFER * (visibleViews - 1));
    // Make it sexy with an animation!!!
    [UIView animateWithDuration:1.0
                     animations:^{
                         float offset = (totalWidth - visibleWidth) / 2.0;
                         for (int i = 0; i < [[self ViewArray] count]; i = i + 1) {
                             UIView *thisView = [[self ViewArray] objectAtIndex:i];
                             if (![thisView isHidden]) {
                                 [thisView setFrame:CGRectMake(offset, BUFFER, WIDTH, WIDTH)];
                                 offset = offset + WIDTH + BUFFER;
                             } 
                         }
                     }
     ];

}
@end

メインビューにボタンを追加し、それをに結び付けるだけIBOutletです。私のiPadシミュレーターで素敵できれいです。

于 2012-05-08T00:29:59.497 に答える
2

@mbm30075コードを変更した後の最終的な解決策は次のとおりです。

- (void)centerVisibleViews{

int visibleViews = 0;
for (int i = 0; i < [[self imgViews] count]; i = i + 1) {
    if (![(UIView *)[[self imgViews] objectAtIndex:i] isHidden]) {
        visibleViews = visibleViews + 1;
    }
}
if(visibleViews==0) return;

float screenWidth = imgAnimals.superview.bounds.size.width;
//float maxWidthImage = screenWidth / visibleViews;

float imgWidth = [imgAnimals frame].size.width;

// Make it sexy with an animation!!!
[UIView animateWithDuration:1.0
                 animations:^{
                     float offset = screenWidth / 2.0 - (visibleViews * imgWidth / 2.0);
                     for (int i = 0; i < [[self imgViews] count]; i = i + 1) {
                         UIView *thisView = [[self imgViews] objectAtIndex:i];
                         if (![thisView isHidden]) {
                             CGRect rect = [thisView frame];
                             rect.origin = CGPointMake(offset, 0);
                             [thisView setFrame:rect];
                             offset = offset + rect.size.width;
                         } 
                     }
                 }
 ];

}

問題は、UIImageViewsに割り当てた特定の幅を使用し、中央にすべて中央に配置したかったということです。これが誰かに役立つことを願っています!

どうもありがとう!

于 2012-05-08T09:06:22.167 に答える