2013-08-22 2 views
2

Я хочу создать кнопку в случайном положении в определенном представлении. Я искал и читал некоторые темы SO, но не смог найти решение проблемы.Ошибка Arc4random: «Неверные операнды для двоичного выражения (« float »и« float »)»

Вот мой код:

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
CGRect buttonRect = button1.frame; 
buttonRect.size = CGSizeMake(100, 100); 
button1.frame = buttonRect; 

[self.arr addObject:button1]; 

int r = ([button1 frame].size.width)/2; 

int x = r + (arc4random() % (self.view.frame.size.width - button1.frame.size.width)); 
int y = r + (arc4random() % (self.view.frame.size.height - button1.frame.size.height)); 
//ERROR:Invalid operands to binary expression ('float' and 'float') 

[button1 setCenter:CGPointMake(x, y)]; 
+0

возможно дубликат [? Как сделать операцию по модулю в Objective-C/сенсорным какао] (http://stackoverflow.com/questions/1271102/how- to-make-a-modulo-operation-in-objective-c-cocoa-touch) – kovpas

+0

'width' является' CGfloat', поэтому вы получаете ошибку. – Exploring

ответ

9

mod (%) не работает на поплавках.

int x = r + (arc4random() % (int)(self.view.frame.size.width - button1.frame.size.width)); 
int y = r + (arc4random() % (int)(self.view.frame.size.height - button1.frame.size.height)); 

В качестве дополнительной записке, arc4random() % … является not recommended.

Вот является предпочтительным методом:

int x = r + arc4random_uniform(self.view.frame.size.width - button1.frame.size.width); 
int y = r + arc4random_uniform(self.view.frame.size.height - button1.frame.size.height); 
+0

Благодарим за быстрый ответ. – THO

3

попытка изменения

int x = r + (arc4random() % (self.view.frame.size.width - button1.frame.size.width)); 
int y = r + (arc4random() % (self.view.frame.size.height - button1.frame.size.height)); 

в

int x = r + (arc4random() % ((int)(self.view.frame.size.width - button1.frame.size.width))); 
int y = r + (arc4random() % ((int)(self.view.frame.size.height - button1.frame.size.height))); 

Это, вероятно, бросает эту ошибку, потому что вы пытаетесь вычислить модуль с помощью терки в качестве параметра

+0

Вам нужно будет иметь '(int)' cast вне круглых скобок, не так ли? – bdesham

+0

Ты избил меня. –

+0

Вы правы, я обновил ответ – Daniel

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

  • Нет связанных вопросов^_^