0

「ロックを解除するスライダー」要素のような UISlider を作成しました。私が書いたアニメーションは、1 つのスライダーだけを指している場合にうまく機能します。しかし、スライダーを動的に作成するには、for ループを使用する必要があります。また、スライダーを作成してスライダーのタグを追加し、次のように for ループ内のスライダーにアニメーション関数を追加すると、アニメーションが機能しません。

for (int i = 0; i < rowCount; i++){
    ...
    UISlider *slider=[[UISlider alloc] initWithFrame:CGRectMake(5+ xInc, 25+yInc, 322, 40)];
    //give a id tag to the slider
    [slider setTag:i*10];
    //set a action to the slider
    [slider addTarget:self action:@selector(UnlocklinkSlider:) forControlEvents:UIControlEventTouchUpInside];
    ...

アニメーション機能は次のとおりです。

- (void)UnlocklinkSlider:(UISlider*)slider
 {
    for (int i = 0; i < rownumber; i++){
        UIImageView *frontimg = (UIImageView *)[self.view viewWithTag:i*10+1];
        ...
        if (slider.tag==i*10) {
            if(slider.value >= 0.5){
                // user did not slide far enough, so return back to 0 position
                [UIView beginAnimations: @"SlideCanceled" context: nil];
                [UIView setAnimationDelegate: self];
                [UIView setAnimationDuration: 0.35];
                // use CurveEaseOut to create "spring" effect
                [UIView setAnimationCurve: UIViewAnimationCurveEaseOut];
                ...
                [UIView commitAnimations];
                ...
            }
            else{
                ...
            }
        }
    }
 }

しかし、アニメーションはこのようには機能しません。理由を知っている人はいますか?

4

2 に答える 2

0

スライダーの値を設定しながら継続時間を制御するには、新しいブロック ベースのアニメーション API を使用する必要があります。

[UIView animateWithDuration:2 animations:^{
    [slider setValue:1];
}

また、2 つの異なるループがありますが、おそらく 1 つしかないはずです。ループですべてのスライダーを作成し、それらをビューに追加する必要があります。ただし、スライダーの 1 つからコールバックを取得する場合、ループは必要ありません。代わりに、アクションを呼び出したスライダー (ユーザーが操作しているスライダー) のみを操作する必要があります。

于 2013-08-23T11:01:58.513 に答える
0

[UIView beginAnimations]and[UIView commitAnimations]をループの外に置いてみてください。

それでもうまくいかない場合は、ビューのレイヤーでCoreAnimationsを使用してみてください。

于 2013-08-23T10:48:50.133 に答える