0

サイズが 68x78 のイメージ ビューを含むスクロール ビューがあります。

ここに画像の説明を入力

ご覧のとおり、中央の画像を除くすべての画像に影があります。ユーザーがスクロールすると変化し、中央の画像は常に鮮明です。左端の画像までは完璧です:

ここに画像の説明を入力

コードは次のとおりです。

-(void) buildSlideView{

    fotosJugadores = [[NSArray alloc] initWithObjects:@"cara5.png", @"cara7.png", @"cara8.png", @"cara9.png", @"cara11.png", @"cara13.png", @"cara14.png", @"cara15.png", @"cara18.png",@"cara19.png", @"cara20.png", @"cara32.png",@"cara44.png",@"cara51.png", @"cara100.png", @"cara101.png", @"cara102.png",@"cara103.png", @"cara104.png", @"cara105.png",@"cara106.png",@"cara107.png", nil];

    numberOfViews = [fotosJugadores count];

    for (int i = 0; i <    [fotosJugadores count]; i++) {

        UIImage *myImage = [UIImage imageNamed:[fotosJugadores objectAtIndex:i]];
        CGFloat yOrigin = i * (myImage.size.width+3) + 120;
        UIImageView *awesomeView = [[UIImageView alloc] initWithFrame:CGRectMake(yOrigin, 0, myImage.size.width, myImage.size.height)];
        awesomeView.tag = i;
        awesomeView.image = myImage;
        awesomeView.alpha = 0.5f;
        awesomeView.backgroundColor = [UIColor blackColor];
        [self.jugadorSlide addSubview:awesomeView];
        awesomeView=nil;

    }

    [jugadorSlide setBackgroundColor:[UIColor blackColor]];
    jugadorSlide.contentSize = CGSizeMake(68 * numberOfViews+240,78);
    jugadorSlide.layer.cornerRadius = 11;
    jugadorSlide.layer.masksToBounds = YES;
    [jugadorSlide setContentOffset:CGPointMake(((68 * numberOfViews)/2), 0)];
    //jugadorSlide.decelerationRate = UIScrollViewDecelerationRateNormal;
    [self scrollViewDidEndDragging:jugadorSlide willDecelerate:NO];

}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    currentIndex = roundf(scrollView.contentOffset.x / 68);
    NSLog(@"current end %d", currentIndex);
    UIImageView *currentImage = [scrollView viewWithTag:currentIndex];
    if (currentIndex>0&&currentIndex<=21){
         if (currentIndex==currentImage.tag){
            currentImage.alpha=1.0f;
            [self changePerfilImage:currentImage.tag];}
             CGPoint pointZero= CGPointMake(scrollView.contentOffset.x, currentImage.frame.origin.y);
            [jugadorSlide setContentOffset:pointZero animated:YES];

    }else {
            UIImageView *currentImage = [scrollView viewWithTag:0];
            NSLog(@"end dragging image tag %d", currentImage.tag);
            currentImage.alpha=1.0f;
            [self changePerfilImage:currentImage.tag];}
            CGPoint pointZero= CGPointMake(currentImage.frame.origin.x+15, 0);
            //[jugadorSlide setContentOffset:pointZero animated:YES];

}

ご覧のとおり、 scrollViewDidEndDragging: "else" で、絶望的な解決策としてタグを強制しましたが、画像が明確になりません。

4

1 に答える 1

1

タグを2回インクリメントしています...

awesomeView.tag = i++;

次のようにする必要があります。

awesomeView.tag = i+1;

タグが割り当てられていないサブビューには 0 のタグが付けられるため、0 のタグは使用しないため、i+1 を使用します。

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    NSInteger currentIndex = roundf(scrollView.contentOffset.x / 68.0) + 1;
    UIImageView *currentImage = [scrollView viewWithTag:currentIndex];
    ...
}

これが機能しない場合は、新しい画像に到達するたびに currentIndex を NSLog し、最初の画像に到達したときに何が起こっているかを確認する必要があります。

于 2012-06-05T20:22:47.430 に答える