0

我有一个 UIView,其中包含一些图像,这些图像将被隐藏以显示我收到的功能。我一直在四处寻找,但我还没有找到重新定位这些 UIImageView 以使它们居中的方法。

我的意思是如果我有以下行:

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

我隐藏了我想展示的第二个和第五个元素

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

但我明白了

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

是否有任何 UIView 属性来控制它,或者我必须手动创建不同的 UIView 或以编程方式在我的代码中添加元素?现在我只使用我的 UIImageView 元素的隐藏属性。

提前致谢!

4

2 回答 2

2

试穿这个尺寸!;-)

视图控制器.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

视图控制器.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 回答