2014-03-25 4 views
0

Я работаю над проектом, где я рисую Images от UIWebView, а затем показывая в tableView с обычным UITableViewCell. Когда UITableView представляет первый раз ... нет отображаемых изображений, поэтому я показываю изображение по умолчанию (то есть значок-thumb.png) в ячейке. После обработки изображений я перезаряжаю UITableView. Я делаю это, как показано ниже ...UIImage заменяет другим UIImage not Smooth

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     NSString *reuseIdentifier = @"CustomTableViewID";    CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 
     if (cell == nil) 
     { 
      cell = (CustomTableViewCell *)[[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:nil options:nil] objectAtIndex:0]; 
     } 

     CGRect mainImageViewFrame = CGRectMake(9, 31, 202, 171); 
     cell.mainImageView.frame = mainImageViewFrame; 

     [cell setBackgroundColor:[UIColor clearColor]]; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
     cell.transform = CGAffineTransformMakeRotation(M_PI * 0.5); 

     cell.slideNumberLbl.textColor = [UIColor whiteColor]; 
     cell.slideNumberLbl.backgroundColor = [UIColor grayColor]; 
     cell.slideNumberLbl.layer.cornerRadius = 5.0; 
     cell.slideNumberLbl.alpha = 0.5; 
     [cell.slideNumberLbl setTextAlignment:NSTextAlignmentCenter]; 
     cell.slideNumberLbl.text = [NSString stringWithFormat:@"%d",indexPath.row+1]; 

     [cell.mainImageView setBackgroundColor:[UIColor clearColor]]; 

     [cell.reflectionImageView setContentMode:UIViewContentModeScaleToFill]; 
     cell.reflectionImageView.alpha = 0.15; 

     NSFileManager *manager = [NSFileManager defaultManager]; 
     NSString *thumbImagepath = [self.storageDirPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%d_thumb%@",indexPath.row, Image_Extension_JPG]]; 

     if([manager fileExistsAtPath:thumbImagepath]){ 
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
       __block UIImage *img = [UIImage imageWithContentsOfFile:thumbImagepath]; 
       dispatch_async(dispatch_get_main_queue(), ^{ 

        CGRect mainImageViewFrame = CGRectMake(9, 31, 202, 171); 
        cell.mainImageView.frame = mainImageViewFrame; 
        cell.mainImageView.image = img; 
        [cell.mainImageView setContentMode:UIViewContentModeScaleAspectFit]; 
        img = nil; 
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
         __block UIImage *reflectionImg = [self reflectedImage:cell.mainImageView withHeight:cell.mainImageView.frame.size.height]; 
         dispatch_async(dispatch_get_main_queue(), ^{ 
          cell.reflectionImageView.image = reflectionImg; 
          reflectionImg = nil; 
         }); 
        }); 
       }); 
      }); 
     } 
     else{ 
      CGRect mainImageViewFrame = CGRectMake(9, 31, 202, 171); 
      mainImageViewFrame.origin.y = mainImageViewFrame.origin.y+10; 
      mainImageViewFrame.size.height = mainImageViewFrame.size.height-20; 
      cell.mainImageView.frame = mainImageViewFrame; 

      [cell.mainImageView setContentMode:UIViewContentModeCenter]; 
      [cell.mainImageView setBackgroundColor:[UIColor whiteColor]]; 
      cell.mainImageView.image = [UIImage imageNamed:@"icon-thumb.png"]; 
      [cell.reflectionImageView setBackgroundColor:[UIColor whiteColor]]; 
      [cell.reflectionImageView setImage:[UIImage imageNamed:@"reflection_temp.png"]]; 
     } 

     return cell; 
    } 

Проблема заключается в том, когда изображение по умолчанию (то есть значок-thumb.png) получает заменить с реальным изображением, как только реальные изображения рендеринга done..the замена не является гладкой , Изображение заменяет вспышкой/или внезапно, но должно быть очень гладко ... любое предложение, спасибо заранее.

+0

http://stackoverflow.com/questions/7638831/fade-dissolve-when-changing-uiimageviews-image/38350024#38350024 –

ответ

0

вы можете использовать CATransition, например

CATransition *transition = [CATransition animation]; 
    transition.duration = 0.2;//duration 
    transition.type = kCATransitionFade; //choose your animation 
    [yourCell.layer addAnimation:transition forKey:nil]; 
    [yourCell.mainimageview setImage:img]; 
+0

savana спасибо за ваш ответ, но я решил проблему. Я нашел http://stackoverflow.com/questions/2834573/how-to-animate-the-change-of-image-in-an-uiimageview. но ваш ответ также принимаю, так как это тоже будет работать. – Suryakant

0

Это может быть глупый ответ, но разве вы не пытались использовать анимацию для этого?

так:

 [UIView animateWithDuration:duration animations:^{ 
      } completion:^(BOOL finished) { 
      } 
     }]; 
0

Я хотел бы сделать что-то вроде следующего:

[UIView transitionWithView:cell.mainImageView 
        duration:0.2f 
        options:UIViewAnimationOptionTransitionCrossDissolve 
       animations:^{ 
        cell.mainImageView.image = [UIImage imageNamed:@"icon-thumb.png"]; 
       } completion:nil]; 

я немного более изящным найти такой подход.

Смежные вопросы