-2

for ループを使用してスクローラーに複数の画像とスライダーを作成しましたが、スライダーの値を変更して画像のアルファを変更するにはどうすればよいですか? 関数 loadImages の外側で uiimages を宣言しようとしたコードを次に示しますが、これは良い考えだとは思いません。for ループを使用せずにそれを行う方法は知っていますが、for ループを使用したい場合、どの uiimage を操作する必要があるかを関数に知らせるにはどうすればよいですか。for ループで作成されたすべての uiimages は、パブリック オブジェクトではないと思います。

-(void)loadImages
{

for (int i = 0; i < 10; i++){
    //show drawing position in the output
    NSLog(@"x:%i, y:%i",xInc, yInc);
    //text label on the slider button
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(78 + xInc, 55+yInc, 200, 20)];
    Person *thisPerson = [arrayOfPerson objectAtIndex:i];
    NSString *namePerson = thisPerson.name;
    [label setText:[NSString stringWithFormat:@"%@",namePerson]];
    [label setTextColor:[UIColor whiteColor]];
    [label setBackgroundColor:[UIColor clearColor]];
    label.textAlignment = NSTextAlignmentCenter;
    //front office background image of slider
    NSString *frontimageName = [NSString stringWithFormat:@"frontofficeBUTTON.png"];
    UIImageView *frontimgView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:frontimageName]];
    frontimgView.frame = CGRectMake(xInc, 10 + yInc, 332, 70);
    [frontimgView setTag:i];
    //back office background image of slider
    NSString *backimageName = [NSString stringWithFormat:@"backofficeBUTTON.png"];
    UIImageView *backimgView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:backimageName]];
    backimgView.frame = CGRectMake(xInc, 10 + yInc, 332, 70);
    [backimgView setTag:i];
    //slider
    UISlider *slider=[[UISlider alloc] initWithFrame:CGRectMake(5+ xInc, 25+yInc, 322, 40)];
    //give a id tag to the slider
    [slider setTag:i];
    //set a action to the slider
    [slider addTarget:self action:@selector(UnlocklinkSlider:) forControlEvents:UIControlEventTouchUpInside];
    //define the appearance of the slider
    UIImage *stetchLeftTrack= [[UIImage imageNamed:@"Nothing.png"]
                               stretchableImageWithLeftCapWidth:30.0 topCapHeight:0.0];
    UIImage *stetchRightTrack= [[UIImage imageNamed:@"Nothing.png"]
                                stretchableImageWithLeftCapWidth:30.0 topCapHeight:0.0];
    [slider setThumbImage: [UIImage imageNamed:@"rightBUTTON.png"] forState:UIControlStateNormal];
    [slider setMinimumTrackImage:stetchLeftTrack forState:UIControlStateNormal];
    [slider setMaximumTrackImage:stetchRightTrack forState:UIControlStateNormal];
    yInc = yInc + 80;
    [_scrollView addSubview:backimgView];
    [_scrollView addSubview:frontimgView];
    [_scrollView addSubview:label];
    [_scrollView addSubview:slider];
}
[_scrollView setContentSize:CGSizeMake(320, scrollLength)];
}

- (void)UnlocklinkSlider:(UISlider*)slider 
{...}
4

1 に答える 1

0

UIControlEventValueChanged画像が同期して更新されるように、スライダーにターゲットとアクションを追加する必要があります (ただし、タッチアップでも機能します)。コールバックを取得したら、slider タグを使用して、一致するタグを持つ画像ビューを見つけます。次に、画像ビューalphaを に設定しslider.valueます。


画像ビューを見つけるには、スクロール ビューのサブビューをループして、サブビューのタグを確認します。同じタグを持つものがたくさんあるため、現在のコードからタグを変更する必要があります。

より良いオプションは、画像ビューへの参照をコントローラーの配列プロパティに保存し、スライダー タグをその配列のインデックスとして使用することです。

于 2013-08-13T15:21:18.933 に答える