我有一个数组,其中有一些项目可以在单击按钮时旋转图像视图,现在当我通过获取当前索引来显示错误的数组时,我很困惑为什么我得到这个。 我的代码是这样的:
- (IBAction)my:(id)sender {
NSString *cureentIndex=0;
NSArray *persons = [NSArray arrayWithObjects:@"M_PI",@" M_PI_4",@" M_PI_2",@"M_PI*2", nil];
NSArray *person = @[@"M_PI", @"M_PI_4", @"M_PI_2"];
_imageView.transform = CGAffineTransformMakeRotation(person[cureentIndex])
if currentIndex != persons.count-1 {
currentIndex = currentIndex + 1
}else {
// reset the current index back to zero
currentIndex = 0
}
}
答案 0 :(得分:1)
您已将cureentIndex
声明为NSString *
,因此当您说person[cureentIndex]
时,编译器认为person
必须是字典,因为您使用的是[]
使用对象访问。这会导致错误,因为person
实际上是一个数组,并且不能用字符串索引。
我认为您打算将cureentIndex
声明为int
,或者您想说currentIndex
?
答案 1 :(得分:0)
有一些错误:
索引必须是int
NSString *cureentIndex=0;
成为
int currentIndex = 0;
并且数组必须是double而不是字符串,CGAffineTransformMakeRotation需要一个双重的CGFloat
NSArray *person = @[@"M_PI", @"M_PI_4", @"M_PI_2"];
变为
NSArray *person = @[[NSNumber numberWithDouble:M_PI], [NSNumber numberWithDouble:M_PI_4], [NSNumber numberWithDouble:M_PI_2]];
和
_imageView.transform = CGAffineTransformMakeRotation(person[cureentIndex])
变为
_imageView.transform = CGAffineTransformMakeRotation([person[cureentIndex] doubleValue]);
答案 2 :(得分:0)
有很多问题,请试试这个
NSInteger currentIndex = 0;
NSArray<NSNumber *> *persons = @[@(M_PI), @(M_PI_4), @(M_PI_2)];
- (IBAction)my:(id)sender {
_imageView.transform = CGAffineTransformMakeRotation(persons[currentIndex].doubleValue)
currentIndex = (currentIndex + 1) % persons.count;
}
答案 3 :(得分:0)
我将您的代码修改为:
NSInteger currentIndex = 0;
NSArray * person = @ [@“M_PI”,@“M_PI_4”,@“M_PI_2”];
CGFloat rotate = [person [currentIndex] floatValue];
_imageView.transform = CGAffineTransformMakeRotation(rotate);
你会发现它不能很好地运行,但是它会是0!因为,NSString的方法floatValue
或doubleValue
只能将字符串(如:@“123”@“0.5”)更改为数字,字符串(如:@“M_PI”)不能改为正确的号码。
我再次修复了你的代码:
NSInteger currentIndex = 0;
CGFloat mPi = M_PI;
NSArray * person = @ [@(mPi),@(mPi / 4.0),@(mPi / 2.0)];
CGFloat rotate = [person [currentIndex] floatValue];
_imageView.transform = CGAffineTransformMakeRotation(rotate);
守则运作良好!这是因为M_PI是A 宏,如果你 写代码@“M_PI”,系统无法识别其值3.1415926。所以 你必须写M_PI而不是@“M_PI”。
事实上,这个问题的核心是你需要一个数字,所以你的数组必须包含一些数字!或者像数字一样的字符串! :)