Dan*_*ark 4 objective-c data-structures
我在代码中做了很多这样的事情:
self.sliderOne.frame = CGRectMake(newX, 0, self.sliderOne.frame.size.width, self.sliderOne.frame.size.height);
Run Code Online (Sandbox Code Playgroud)
有什么方法可以避免这种繁琐的代码吗?我尝试过这种类型的东西:
self.sliderOne.frame.origin.x = newX;
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个Lvalue required as left operand of assignment错误.
我终于听了@Dave DeLong的建议,并制作了一个类别.您所要做的就是在任何想要利用它的类中导入它.
UIView的+ AlterFrame.h
#import <UIKit/UIKit.h>
@interface UIView (AlterFrame)
- (void) setFrameWidth:(CGFloat)newWidth;
- (void) setFrameHeight:(CGFloat)newHeight;
- (void) setFrameOriginX:(CGFloat)newX;
- (void) setFrameOriginY:(CGFloat)newY;
@end
Run Code Online (Sandbox Code Playgroud)
UIView的+ AlterFrame.m
#import "UIView+AlterFrame.h"
@implementation UIView (AlterFrame)
- (void) setFrameWidth:(CGFloat)newWidth {
CGRect f = self.frame;
f.size.width = newWidth;
self.frame = f;
}
- (void) setFrameHeight:(CGFloat)newHeight {
CGRect f = self.frame;
f.size.height = newHeight;
self.frame = f;
}
- (void) setFrameOriginX:(CGFloat)newX {
CGRect f = self.frame;
f.origin.x = newX;
self.frame = f;
}
- (void) setFrameOriginY:(CGFloat)newY {
CGRect f = self.frame;
f.origin.y = newY;
self.frame = f;
}
@end
Run Code Online (Sandbox Code Playgroud)
我可以使用块来干掉这些方法......我希望很快就会这样做.
后来:我刚刚注意到CGRectOffset和CGRectInset,所以这一类可以清理一个位(如果不是完全消除).