gpt4 book ai didi

iphone - UIPickerView 在选择器中消失的图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:48:18 25 4
gpt4 key购买 nike

我正在尝试使用 UIPickerView 构建“老虎机”游戏。我使用 UIImageView 填充它。问题是,每次旋转后选择器 View 中的随机图像都会消失,然后再次随机显示。它发生在带有 ios 5.1.1 的设备上,但在带有 ios4.2.1 和模拟器的设备上它可以完美运行。现在我正在使用 CircularPickerView但在我使用 UIPickerView 之前,问题是一样的。这是屏幕截图:http://axgrzesiek.w.interii.pl/licznik.PNG

GraViewController.h:

#import <UIKit/UIKit.h>

#import "CircularPickerView.h"
@interface GraViewController : UIViewController
<UIPickerViewDataSource, UIPickerViewDelegate> {
CircularPickerView *picker;
UILabel *winLabel;
NSArray *column1;
NSArray *column2;
NSArray *column3;


}
@property(nonatomic, retain) IBOutlet CircularPickerView *picker;
@property(nonatomic, retain) IBOutlet UILabel *winLabel;
@property(nonatomic, retain) NSArray *column1;
@property(nonatomic, retain) NSArray *column2;
@property(nonatomic, retain) NSArray *column3;
-(IBAction)spin;

@end

GraViewController.m:

- (IBAction)spin { 
BOOL win = NO;
int numInRow = 1;
int lastVal = -1;
for (int i = 0; i < 3; i++) {
int newValue = arc4random() % [self.column1 count];
if (newValue == lastVal)
numInRow++;
else
numInRow = 1;

lastVal = newValue;
//if (newValue < [self.column1 count] || newValue >= (2 * [self.column1 count]) ) {
//newValue = newValue % [self.column1 count];
//newValue += [self.column1 count];
[self.picker selectRow:newValue inComponent:i animated:YES];


//}
NSLog(@"kol:%d %d",i, newValue);
//[picker reloadComponent:i];
if (numInRow >= 3)
win = YES;
}
if (win)
winLabel.text = @"WIN!";
else
winLabel.text = @"";

//[picker reloadAllComponents];
//[self performSelector:@selector(moveIntoPosition) withObject:nil afterDelay:0.5f];



- (void)viewDidLoad {

NSString *title=@"Gra";
[self setTitle:title];

UIImage *seven = [UIImage imageNamed:@"jeden.png"];
UIImage *bar = [UIImage imageNamed:@"dwa.png"];
UIImage *crown = [UIImage imageNamed:@"trzy.png"];
UIImage *cherry = [UIImage imageNamed:@"cztery.png"];
UIImage *lemon = [UIImage imageNamed:@"piec.png"];
UIImage *apple = [UIImage imageNamed:@"szesc.png"];
for (int i = 1; i <= 3; 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];
//column1=[[NSArray alloc]initWithArray:imageViewArray];
//column2=[[NSArray alloc]initWithArray:imageViewArray];
//column3=[[NSArray alloc]initWithArray:imageViewArray];
[fieldName release];
[imageViewArray release];
[sevenView release];
[barView release];
[crownView release];
[cherryView release];
[lemonView release];
[appleView release];
//[picker selectRow: [self.column1 count] * (48 / 2) inComponent:i-1 animated:NO];
}


}


- (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];
[arrayName release];
return [array objectAtIndex:row];

}

最佳答案

我认为问题可能出在您为选择器重用 View 的方式上——您不应该自己缓存 UIImageView(可能 UIPickerView 试图在多个地方使用相同的 UIImageView,所以其中一个地方没有被占用)。

正确的方法是存储 UIImage 实例并填充可能由选择器缓存的 UIImageView。样板代码(未测试):

- (void) viewDidLoad{
...
Here cache UIImages, not UIImageViews
...
}

- (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];
[arrayName release];
UIImage *image = [array objectAtIndex:row];

if (!view){
view = [[[UIImageView alloc] init] autorelease];
}
[(UIImageView*)view setImage:image];
return view;
}

关于iphone - UIPickerView 在选择器中消失的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com