改变CGRect(或任何结构)?

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错误.

Dan*_*ark 8

我终于听了@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)

我可以使用块来干掉这些方法......我希望很快就会这样做.

后来:我刚刚注意到CGRectOffsetCGRectInset,所以这一类可以清理一个位(如果不是完全消除).