Почему мой UIPickerView не анимируется так, как должно быть?

так что это в основном похоже на игровой автомат, очень простой, но проблема, с которой я столкнулся, заключается в том, что когда вы нажимаете кнопку вращения, движение компонентов не анимируется, даже несмотря на то, что я отправил анимированный аргумент YES BOOL. Я понятия не имею, что я делаю неправильно, любая помощь будет оценена по достоинству.

Ник

PS загрузите весь проект здесь: http://files.me.com/knyck2/dcca9y

  //
       //  CustomPickerViewController.m
  //  Pickers
  //
  //  Created by Nicholas Iannone on 1/29/10.
  //  Copyright 2010 Apple Inc. All rights reserved.
  //

  #import "CustomPickerViewController.h"


  @implementation CustomPickerViewController

  @synthesize column1, column2, column3, column4, column5, picker, winLabel;

  -(IBAction) spin : (id) sender {

 NSLog(@"even got here");

 BOOL win = NO;

 int numInRow = 1;

 int lastVal = -1;

 for (int i = 0; 1 < 5; i++) {
 int newValue = random() % [self.column1 count];

 if (newValue == lastVal) {
    NSLog(@"even got here");

numInRow++;
}
else 
    numInRow = 1;

    lastVal = newValue;
[picker selectRow:newValue inComponent:i animated:YES];
[picker reloadComponent:i];
if (numInRow >= 3) 
    win = YES;

NSLog(@"even got here");

 }

 if (win) 
winLabel.text = @"winner!";

          else {
winLabel.text = @"";
          NSLog(@"even got here");
          }

  }

  /*
   // The designated initializer.  Override if you create the controller      programmatically                and want to perform customization that is not appropriate      for viewDidLoad.
  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
 if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
 }
 return self;
  }
  */


  // Implement viewDidLoad to do additional setup after loading the view, typically from           a nib.
  - (void)viewDidLoad {
 UIImage *seven = [UIImage imageNamed:@"seven.png"];
 UIImage *bar = [UIImage imageNamed:@"bar.png"];
 UIImage *crown = [UIImage imageNamed:@"crown.png"];
 UIImage *cherry = [UIImage imageNamed:@"cherry.png"];
 UIImage *lemon = [UIImage imageNamed:@"lemon.png"];
 UIImage *apple = [UIImage imageNamed:@"apple.png"];

for (int i = 1; i <= 5 ;  i++) {
    UIImageView *sevenView = [[UIImageView alloc] initWithImage: seven];
    UIImageView *barView = [[UIImageView alloc] initWithImage: bar];
    UIImageView *crownView = [[UIImageView alloc] initWithImage: crown];
    UIImageView *cherryView = [[UIImageView alloc] initWithImage:      cherry];
    UIImageView *lemonView = [[UIImageView alloc] initWithImage: lemon];
    UIImageView *appleView = [[UIImageView alloc] initWithImage: apple];


    NSArray *imageViewArray = [[NSArray alloc] initWithObjects:      sevenView, barView, crownView, cherryView, lemonView, appleView, nil];
    NSString *fieldName =[[NSString alloc] initWithFormat:@"column%d",      i];
    [self setValue:imageViewArray forKey:fieldName];
    [fieldName release];
    [imageViewArray release];

    [sevenView release];
    [crownView release];
    [barView release];
    [cherryView release];
    [lemonView release];
    [appleView release];

     }

 srandom(time(NULL));
 [super viewDidLoad];
  }



  /*
  // Override to allow orientations other than the default portrait orientation.
  -     (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 // Return YES for supported orientations
 return (interfaceOrientation == UIInterfaceOrientationPortrait);
  }
  */

  - (void)didReceiveMemoryWarning {
 // Releases the view if it doesn't have a superview.
 [super didReceiveMemoryWarning];

 // Release any cached data, images, etc that aren't in use.
  }

  - (void)viewDidUnload {
 [super viewDidUnload];
 // Release any retained subviews of the main view.
 // e.g. self.myOutlet = nil;
  }


  - (void)dealloc {
 [picker release];
 [winLabel release];
 [column1 release];
 [column2 release];
 [column3 release];
 [column4 release];
 [column5 release];


 [super dealloc];
  }


  #pragma mark -
  #pragma mark Picker Data Source Methods

  -(NSInteger) numberOfComponentsInPickerView: (UIPickerView *)  pickerView {

 return 5;
  }


  -(NSInteger) pickerView: (UIPickerView *) pickerView numberOfRowsInComponent:           (NSInteger) component {

 return [self.column1 count];

  }

  #pragma mark Picker Delegate Methods

  -(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent: (NSInteger) component reusingView : (UIView *)view {

 NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d", component + 1];
 NSArray *array = [self valueForKey:arrayName];
 NSLog(@"got here yo");
 return [array objectAtIndex: row];
 NSLog(@"holyshit");


  }

  @end

person nickthedude    schedule 01.02.2010    source источник
comment
извините, первая ссылка на проект была старой версией, которая не работала, новая ссылка работает.   -  person nickthedude    schedule 02.02.2010


Ответы (2)


Я вернулся и сравнил свой код с книгой, в которой указан этот проект, и заметил, что мой код будет работать так, как ожидалось (с анимацией), если я встрою его в 3.1.2 sdk и iphone sim. Так что что-то в новом xcode искажает анимацию, по крайней мере, так это выглядит.

person nickthedude    schedule 02.02.2010
comment
У меня точно такая же проблема. Либо в iOS4+, либо в iOS5+ программная анимация UIPickerView изменилась и стала очень резкой, а не плавной, как плавное замедление, которое вы получаете при ручном щелчке UIPickerView. Любые предложения кто-нибудь? - person Bogatyr; 04.04.2013

Вероятно, это не анимация, потому что вы делаете [picker reloadComponent:i] сразу после выбора строки с анимацией. Перезагрузка, вероятно, приводит к остановке любой анимации, и в этом нет необходимости, поскольку вы фактически не меняете содержимое средства выбора.

person Daniel Dickison    schedule 01.02.2010
comment
я избавился от него и все равно, любые другие идеи? это может быть что-то в пера? - person nickthedude; 02.02.2010