Попытка передать CGrect performSelector withObject

Я пытаюсь передать CGRect:

SEL frameSel = NSSelectorFromString(@"setFrame:");
CGRect rect = CGRectMake(10, 10, 200, 100);
[object performSelector:frameSel withObject:rect ];

Но это не компилирует

Я также попробовал:

SEL frameSel = NSSelectorFromString(@"setFrame:");
CGRect rect = CGRectMake(10, 10, 200, 100);
NSValue * value = [NSValue valueWithCGRect:rect];
[object performSelector:frameSel withObject:value ];

На самом деле это действительно компилирует, но когда я отлаживаю, кадр не является setted правильно:

po object
<UILabel: 0x39220f0; frame = (0 0; 200 100); text = 'reflectionLabel'; clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x3922240>>

Но это должен быть кадр = (10 10; 200 100)

Как я могу решить эту проблему?

Заранее спасибо!

5
задан Keavon 18 May 2014 в 17:19
поделиться

1 ответ

 CGRect rect = CGRectMake (10, 10, 200, 100); 
 [object performSelector: frameSel withObject: rect]; {{1 }} 

Но это не компилируется

правильно, потому что rect - это структура, а не указатель на объект.

 CGRect rect = CGRectMake (10, 10, 200, 100); 
NSValue * value = [NSValue valueWithCGRect: rect]; 
 [object performSelector: frameSel withObject: value]; {{ 1}} 

Фактически, это компилируется, но когда я отлаживаю, кадр установлен неправильно:

 po object 
 > 
 

Ну, это не мусор, так что вроде бы сработало, хотя происхождение почему-то осталось нулевым. Вы можете задать об этом отдельный вопрос.

В любом случае, почему вы используете performSelector: withObject: ? Вы не обращаетесь к конкретному потоку и не задерживаете его; почему бы просто не сказать object.frame = rect ?

5
ответ дан 13 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: