动态分配随机图像作为按钮的背景分开

时间:2012-05-31 04:22:52

标签: iphone objective-c ipad

-(void)setButtons_AsPerTheMatrixSelection
{

        for(UIView *subview in [viewWithButtons subviews])
        {        
            if ([subview isKindOfClass:[UIButton class]])
            {
            [subview removeFromSuperview];
            }
        }
    viewWithButtons = [[UIView alloc] init];

    width = 48;
    height = 48;

    pw = 49;
    ph = 49;

    arrButton = [[NSMutableArray alloc] init];
    UIImage *imgDefaultBG = [UIImage imageNamed:@"bg.jpg"];

    viewWithButtons.frame = CGRectMake(50, 40, 200, 260);

    ch = 4;
    cv = 4;

    for ( i = 0 ; i < cv ; ++i )
    {
        for ( j = 0 ; j < ch ; ++j )
        {
            btnMatrix = [[[UIButton alloc] initWithFrame:CGRectMake(10+pw*j, 51+ph*i, width, height)] autorelease];
            btnMatrix.tag = i*ch+j;
            btnMatrix.userInteractionEnabled = TRUE;

            bulImageStatus = FALSE;

            [btnMatrix addTarget:self action:@selector(changeImage:) forControlEvents:UIControlEventTouchDown];
            [btnMatrix setBackgroundImage:imgDefaultBG forState:UIControlStateNormal];

            [viewWithButtons addSubview:btnMatrix];

            [arrButton addObject:btnMatrix];
        }
    }
    NSLog(@"arrButton object count is:--> %d",[arrButton count]);
        [self.view addSubview:viewWithButtons];
}

-(void)AddImageToArray
{

    arr_FirstSet = [[NSMutableArray alloc] init];
    NSString *strImageName;

if(appDelegate.intCategoryBtnTag == 0)
{
    for (intimg = 1; intimg <= 28; intimg++)
    {
        strImageName = [NSString stringWithFormat:@"%d_1.png",intimg];
        NSLog(@"strImageName is :--> %@",strImageName);
        [arr_FirstSet addObject:strImageName];
    }
    NSLog(@"arr_FirstSet objects are...%@",arr_FirstSet);
}
}

-(void)changeImage:(id)sender
{
    UIImage *img;
    NSString *strImageName;
    strImageName = [arr_FirstSet objectAtIndex:arc4random() % [arr_FirstSet count]/2];
    NSLog(@"btnMatrix is:--> %@",strImageName);
    img = [UIImage imageNamed:strImageName];
    //[btnMatrix setImage:img forState:UIControlEventTouchDown];
    NSLog(@"sender detail is:--> %@",sender);
    [sender setBackgroundImage:img forState:UIControlStateHighlighted];
}

这是我在“ setButtons_AsPerTheMatrixSelection ”方法中设置动态按钮的代码,

AddImageToArray ”方法用于逐个将图像从bundle添加到NSMutableArray(arr_FirstSet)。

changeImage ”方法用于设置特定按钮的背景。

我可以随意将图像设置为按钮的背景,

但主要问题是我必须将固定动态图像设置为特定按钮。

现在每次点击特定按钮时,我按下它一次,两次,三次等随机图像...

我必须将“changeImage”中随机生成的任何特定图像设置为单个按钮&amp;休息到其他按钮单一。

然后我必须检查两个按钮是否具有相同的背景,然后这两个按钮将从矩阵中删除。

请指导我正在做的错误&amp;帮助我。

1 个答案:

答案 0 :(得分:0)

    //Please replace this method

    -(void)changeImage:(UIButton *)sender   
    {    
            UIImage *img;    
            NSString *strImageName;
            strImageName = [arr_FirstSet objectAtIndex:arc4random() % [arr_FirstSet count]/2];    

            img = [UIImage imageNamed:strImageName];   

    //for the first time sender.imageView.image property will be null then only we set image to the button. 
//For second click this condition fails and does not set the other image.
            if(!sender.imageView.image)   
            {
                [sender setImage:img forState:UIControlStateHighlighted];
                [sender setImage:img forState:UIControlStateSelected];
            }
// Calling a method to check if two images of buttons are same.
            [self checkIfTwoImagesAreSame:sender];
    }

    //And Add this method

    - (void)checkIfTwoImagesAreSameImageMaching:(UIButton *)sender
    {
        for(UIView *subview in [viewWithButtons subviews])
        {
            if ([subview isKindOfClass:[UIButton class]])
            {
                UIButton *btn = (UIButton *)subview;
// This condition is comparing clicked button image with all the buttons images of the viewWithButtons view if it isEqual: 
                if(sender.imageView.image && btn.imageView.image && [sender.imageView.image isEqual:btn.imageView.image])
                {
// this is checking if the clicked button is not comparing with itself
                    if(btn.tag != sender.tag)
                    {
                        [btn removeFromSuperview];
                        [sender removeFromSuperview];
    //                    OR
    //                    btn.selected = YES;
    //                    sender.selected = YES;
    //                    OR                    
    //                    btn.hidden = YES;
    //                    sender.hidden = YES;
                    }
                }
            }
        }
    }