Objective c 隐藏某些视图时在视图上重新定位UIImageView

Objective c 隐藏某些视图时在视图上重新定位UIImageView,objective-c,ios,xcode,uiview,hidden,Objective C,Ios,Xcode,Uiview,Hidden,我有一个UIView,一行中有一些图像,这些图像将被隐藏,以便显示我收到的功能。我一直在四处搜索,但还没有找到重新定位这些UIImageView以使其居中的方法 我的意思是,如果我有以下行: |X||X||X||X||X||X||X| 我隐藏了我想展示的第二个和第五个元素 |X||X||X||X||X| 但我明白了 |X| |X||X| |X||X| 是否有UIView属性来控制它,或者我必须手动创建不同的UIView,或者以编程方式在代码中添加元素?现在我只使用UIIma

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

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

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

   |X||X||X||X||X|
但我明白了

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

提前谢谢

试试这个尺码!;-)

ViewController.h

#定义缓冲区10
#定义宽度90
#进口
@界面ViewController:UIViewController
@属性(强,非原子)NSMUTABLEARRY*ViewArray;
-(iAction)hideViews:(id)发送方;
-(无效)中心可视视图;
@结束
ViewController.m

#导入“ViewController.h”
@实现视图控制器
@综合视景阵列;
-(无效)viewDidLoad{
[超级视图下载];
NSMutableArray*colorArray=[NSMutableArray];
[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]];
对于(int i=0;i<7;i=i+1){
UIView*view=[[UIView alloc]initWithFrame:CGRectMake(缓冲区+((宽度+缓冲区)*i),缓冲区,宽度,宽度)];
[查看setBackgroundColor:[colorArray objectAtIndex:i]];
[[self-ViewArray]addObject:view];
[[self view]addSubview:view];
}
}
-(iAction)hideViews:(id)发件人{
对于(int i=0;i<[[self-ViewArray]计数];i=i+1){
如果(i==1 | | i==4){
[(UIView*)[[self-ViewArray]objectAtIndex:i]setHidden:YES];
}
}
[self-centerVisibleViews];
}
-(无效)中心可视视图{
int visibleViews=0;
对于(int i=0;i<[[self-ViewArray]计数];i=i+1){
如果(![(UIView*)[[self-ViewArray]objectAtIndex:i]isHidden]){
visibleViews=visibleViews+1;
}
}
浮动总宽度=(缓冲区*2)+(宽度*[[self-ViewArray]计数])+(缓冲区*([[self-ViewArray]计数]-1));
浮点visibleWidth=(缓冲区*2)+(宽度*VisibleView)+(缓冲区*(VisibleView-1));
//用动画让它变得性感!!!
[UIView animateWithDuration:1.0
动画:^{
浮动偏移=(总宽度-可见宽度)/2.0;
对于(int i=0;i<[[self-ViewArray]计数];i=i+1){
UIView*thisView=[[self-ViewArray]objectAtIndex:i];
如果(![thisView isHidden]){
[此视图设置帧:CGRectMake(偏移、缓冲、宽度、宽度)];
偏移量=偏移量+宽度+缓冲区;
} 
}
}
];
}
@结束
唯一要做的就是在主视图中添加一个按钮,并将其绑定到
IBOutlet
。在我的iPad模拟器上很漂亮。

试试这个大小!;-)

ViewController.h

#定义缓冲区10
#定义宽度90
#进口
@界面ViewController:UIViewController
@属性(强,非原子)NSMUTABLEARRY*ViewArray;
-(iAction)hideViews:(id)发送方;
-(无效)中心可视视图;
@结束
ViewController.m

#导入“ViewController.h”
@实现视图控制器
@综合视景阵列;
-(无效)viewDidLoad{
[超级视图下载];
NSMutableArray*colorArray=[NSMutableArray];
[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]];
对于(int i=0;i<7;i=i+1){
UIView*view=[[UIView alloc]initWithFrame:CGRectMake(缓冲区+((宽度+缓冲区)*i),缓冲区,宽度,宽度)];
[查看setBackgroundColor:[colorArray objectAtIndex:i]];
[[self-ViewArray]addObject:view];
[[self view]addSubview:view];
}
}
-(iAction)hideViews:(id)发件人{
对于(int i=0;i<[[self-ViewArray]计数];i=i+1){
如果(i==1 | | i==4){
[(UIView*)[[self-ViewArray]objectAtIndex:i]setHidden:YES];
}
}
[self-centerVisibleViews];
}
-(无效)中心可视视图{
int visibleViews=0;
对于(int i=0;i<[[self-ViewArray]计数];i=i+1){
如果(![(UIView*)[[self-ViewArray]objectAtIndex:i]isHidden]){
visibleViews=visibleViews+1;
}
}
浮动总宽度=(缓冲区*2)+(宽度*[[self-ViewArray]计数])+(缓冲区*([[self-ViewArray]计数]-1));
浮点visibleWidth=(缓冲区*2)+(宽度*VisibleView)+(缓冲区*(VisibleView-1));
//用动画让它变得性感!!!
[UIView animateWithDuration:1.0
动画:^{
浮动偏移=(总宽度-可见宽度)/2.0;
对于(int i=0;i<[[self-ViewArray]计数];i=i+1){
UIView*thisView=[[self-ViewArray]objectAtIndex:i];
如果(![thisView isHidden]){
[此视图设置帧:CGRectMake(偏移、缓冲、宽度、宽度)];
偏移量=偏移量+宽度+缓冲区;
#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
#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
- (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;
                         } 
                     }
                 }
 ];

}