objective c - Where is the best place to define frame sizes for subviews? -
where programmers specify how big frames supposed be? tried put following code in instance variables section of .h file
cgrect backbuttonrect = cgrectmake(2 * w/25, 18 * h/25, 6 * w/25, 2 * h/25); but won't let me reason. want put parameters in place that's easy remember can debug later.
you cannot initialize instance variable in declaration. that's way objective-c is. it's different java or c# (or c++11) in regard. instance variables initialized zero.
you didn't class contains instance variable.
if you're loading object xib or storyboard, doesn't matter class is; initialized receiving initwithcoder: message. initialize backbuttonrect in initwithcoder:. example:
- (instancetype)initwithcoder:(nscoder *)adecoder { if ((self = [super initwithcoder:adecoder])) { cgfloat w = 100, h = 64; backbuttonrect = cgrectmake(2 * w/25, 18 * h/25, 6 * w/25, 2 * h/25); } return self; } alternatively, if won't know w , h until of outlets hooked up, initialize backbuttonrect in awakefromnib:
- (void)awakefromnib { [super awakefromnib]; backbuttonrect = cgrectmake(2 * w/25, 18 * h/25, 6 * w/25, 2 * h/25); } if you're creating object in code, matter class is. if it's uiview subclass, designated initializer initwithframe:, that's method override initialization:
- (instancetype)initwithframe:(cgrect)frame { if ((self = [super initwithframe:frame])) { cgfloat w = 100, h = 64; backbuttonrect = cgrectmake(2 * w/25, 18 * h/25, 6 * w/25, 2 * h/25); } return self; } if it's uiviewcontroller subclass, designated initializer initwithnibname:bundle:.
- (id)initwithnibname:(nsstring *)nibnameornil bundle:(nsbundle *)nibbundleornil { if (self = [super initwithnibname:nibnameornil bundle:nibbundleornil]) { cgfloat w = 100, h = 64; backbuttonrect = cgrectmake(2 * w/25, 18 * h/25, 6 * w/25, 2 * h/25); } return self; }
Comments
Post a Comment