Iphone 如何从UIButton调用的另一个函数访问动态UIView

Iphone 如何从UIButton调用的另一个函数访问动态UIView,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,我有一段代码,我想让它做的是,在屏幕上创建几个UIView,上面有一个按钮,当你点击UIView顶部的按钮时,UIView自身将执行动画,当你再次点击UIView另一侧的按钮时,它将翻转到另一侧,它会向后翻转 所以我已经动态创建了UIView,但是我有一个问题,按钮正在执行动作,但是视图不会执行动画,因为我不知道如何接触到特定的UIView 我怎么做 -(void)viewDidLoad { arrImages = [NSMutableArray arrayWithObjects:[UI

我有一段代码,我想让它做的是,在屏幕上创建几个UIView,上面有一个按钮,当你点击UIView顶部的按钮时,UIView自身将执行动画,当你再次点击UIView另一侧的按钮时,它将翻转到另一侧,它会向后翻转

所以我已经动态创建了UIView,但是我有一个问题,按钮正在执行动作,但是视图不会执行动画,因为我不知道如何接触到特定的UIView

我怎么做

-(void)viewDidLoad
{
    arrImages = [NSMutableArray arrayWithObjects:[UIImage imageNamed:@"image001.jpg"],[UIImage imageNamed:@"image002.jpg"],[UIImage imageNamed:@"image003.jpg"],[UIImage imageNamed:@"image004.png"],[UIImage imageNamed:@"image005.JPG"],[UIImage imageNamed:@"image006.jpg"],[UIImage imageNamed:@"image007.jpeg"],[UIImage imageNamed:@"image008.jpg"],[UIImage imageNamed:@"image009.jpg"],[UIImage imageNamed:@"image010.png"],[UIImage imageNamed:@"image001.jpg"],[UIImage imageNamed:@"image002.jpg"],[UIImage imageNamed:@"image003.jpg"],[UIImage imageNamed:@"image004.png"],[UIImage imageNamed:@"image005.JPG"],[UIImage imageNamed:@"image006.jpg"],[UIImage imageNamed:@"image007.jpeg"],[UIImage imageNamed:@"image008.jpg"],[UIImage imageNamed:@"image009.jpg"],[UIImage imageNamed:@"image010.png"], nil];

    x = 0;
    btnFrameX = 18;
    btnFrameY = 20;

    for (int i = 0; i < [arrImages count]; i++)
    {
        if (btnFrameX <= 237)
        {
            //  Create views of cards

            UIView * first = [[UIView alloc]initWithFrame:CGRectMake(btnFrameX, btnFrameY, 65, 65)];
            UIView * secod = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 65, 65)];
            UIView * third = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 65, 65)];

            first.tag = [[NSString stringWithFormat:@"1%i",i]intValue];
            secod.tag = [[NSString stringWithFormat:@"2%i",i]intValue];
            third.tag = [[NSString stringWithFormat:@"3%i",i]intValue];

            NSLog(@"1%i",i);
            NSLog(@"2%i",i);
            NSLog(@"3%i",i);

            UILabel * cardLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 65, 65)];
            cardLabel.text = [NSString stringWithFormat:@"%i",i+1];

            UIButton * cardBtn = [UIButton buttonWithType:UIButtonTypeCustom];
            [cardBtn setFrame:CGRectMake(0, 0, 65, 65)];
            [cardBtn setTitle:[NSString stringWithFormat:@"%i",i] forState:UIControlStateNormal];
            [cardBtn setImage:[arrImages objectAtIndex:i] forState:UIControlStateNormal];

            [cardBtn addTarget:self action:@selector(flipView:) forControlEvents:UIControlEventTouchUpInside];

            [secod addSubview:cardLabel];
            [third addSubview:cardBtn];
            [first addSubview:secod];
            [first addSubview:third];
            [self.view addSubview:first];

            btnFrameX = btnFrameX + 73;
        }
        if (btnFrameX > 237)
        {
            btnFrameX = 18;
            btnFrameY = btnFrameY + 73;
        }
    }


-(IBAction) flipView:(id)sender
{
    [UIView beginAnimations:nil context:nil];
    // Should hide the one that you clicked on and show the other one.
    [self showOtherView];
    // flipping the mainview (first), he's the one that the other 2 UIViews (second and third) attached on.
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:first cache:YES];
    [UIView setAnimationDuration:1.0f];
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
}

-(void) showOtherView
{    
    if (x == 0)
    {
        x = 1;
        second.hidden = NO;
        third.hidden = YES;
    }
    else
    {
        x = 0;
        second.hidden = YES;
        third.hidden = NO;
    }
}
-(void)viewDidLoad
{
arrImages=[NSMutableArray arrayWithObjects:[UIImage ImageName:@“image001.jpg”]、[UIImage ImageName:@“image002.jpg”]、[UIImage ImageName:@“image003.jpg”]、[UIImage ImageName:@“image004.png”]、[UIImage ImageName:@“image005.jpg”]、[UIImage ImageName:@“image007.jpg”]、[UIImage ImageName:@“image008.jpg”],[UIImage ImageName:@“image009.jpg”]、[UIImage ImageName:@“image010.png”]、[UIImage ImageName:@“image001.jpg”]、[UIImage ImageName:@“image002.jpg”]、[UIImage ImageName:@“image004.png”]、[UIImage ImageName:@“image005.jpg”]、[UIImage ImageName:@“image006.jpg”、[UIImage ImageName:@“image007.jpg”]、[UIImage ImageName:@“image007.jpg”],[UIImage ImageName:@“image008.jpg”],[UIImage ImageName:@“image009.jpg”],[UIImage ImageName:@“image010.png”],无];
x=0;
btnFrameX=18;
btnFrameY=20;
对于(int i=0;i<[arr图像计数];i++)
{
如果(btnFrameX 237)
{
btnFrameX=18;
btnFrameY=btnFrameY+73;
}
}
-(iAction)flipView:(id)发送方
{
[UIView beginAnimations:nil上下文:nil];
//应该隐藏您单击的一个,并显示另一个。
[自我展示其他视图];
//翻转主视图(第一个),他就是其他两个UIView(第二个和第三个)连接的那个。
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:第一个缓存:是];
[UIView设置动画持续时间:1.0f];
[UIView setAnimationDelegate:self];
[UIView委员会];
}
-(无效)显示其他视图
{    
如果(x==0)
{
x=1;
第二,隐藏=否;
第三,隐藏=是;
}
其他的
{
x=0;
第二,隐藏=是;
第三,隐藏=否;
}
}
我希望我解释得很好,如果没有,请问我,我会回答


非常感谢!

您的按钮是您想要访问的UIView的子视图,不是吗

如果是这样的话,很简单:将选择器和目标设置为您的按钮

[cardBtn addTarget:self action:@selector(flipView:) forControlEvents:UIControlEventTouchUpInside];
声明你的功能

-(void)flipView:(UIButton*)sender;
单击的按钮将位于sender参数中。因此:

-(void)flipView:(UIButton*)sender {
    UIView * reachedView = [sender superview];
    /* make what you want with the reached view ! */
}
编辑:

在描述中,您需要两个按钮:每侧一个。第一侧是viewA,第二侧是viewB。viewA和viewB属于mainView

UIButton btA = ...
UIButton btB = ...
[btA addTarget:self action:@selector(flipView:) forControlEvents:UIControlEventTouchUpInside];
[btB addTarget:self action:@selector(flipView:) forControlEvents:UIControlEventTouchUpInside];
[viewA addSubview:btA];
[viewB addSubview:btB];
[mainView addSubview:viewA];
[mainView addSubview:viewB];
现在在翻转视图中:

-(void)flipView:(UIButton*)sender {
    UIView * mainView = [[sender superview] superview]; // the first for viewA or B, the second for mainView...
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.75];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:mainView cache:YES];
    [mainView exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
    [UIView commitAnimations];
}

它是否与您的问题相对应?

声明属性UIView

UIView *flippedVew;
//set property.

在视图上单击按钮时,设置属性和按钮动作(在此处执行动画)在该视图上制作动画。类似地,当单击另一个视图上的按钮时,将属性设置为该视图。

谢谢,动画正在工作,视图正在翻转,但我有另一个问题,如何将特定的“第二个”和“第三个”视图设置为隐藏或显示,因为我只能到达发送方,即“第一个”视图。它似乎您正在使用标记。如果是这样,您可以在第一个视图中使用-(UIView*)viewWithTag:(NSInteger)标记来检索好的。我如何使用它?我如何才能到达“第二个”和“第三个”UIView。因为第一个视图正在翻转,但我只在“-(void)showOtherView”中的“第二个”和“第三个”中使用,那么我如何才能接触到里面的2个UIView呢?酷哥,这很好!非常感谢你的大力帮助!:)我想创建一个记忆卡游戏,所以,当你点击一个图像时,它会翻转,当然,我想检查按钮上的图像,如果它与我点击的第二个按钮上的图像相等,它们会逐渐消失。我如何比较它们呢?因为每次它只有一个按钮……对我来说有点复杂,我是obj-c的新手:(我该怎么做?