Alter CGRect (or any struct)?

后端 未结 3 1995

I do this quite a bit in my code:

self.sliderOne.frame  = CGRectMake(newX, 0, self.sliderOne.frame.size.width, self.sliderOne.frame.size.height); 

3条回答
  •  粉色の甜心
    2021-01-06 07:32

    I finally followed @Dave DeLong's suggestion and made a category. All you have to do is import it in any class that wants to take advantage of it.

    UIView+AlterFrame.h

    #import 
    
    @interface UIView (AlterFrame)
    
    - (void) setFrameWidth:(CGFloat)newWidth;
    - (void) setFrameHeight:(CGFloat)newHeight;
    - (void) setFrameOriginX:(CGFloat)newX;
    - (void) setFrameOriginY:(CGFloat)newY;
    
    @end
    

    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
    

    I could DRY up the methods using blocks... I'll do that at some point soon, I hope.

    Later: I just noticed CGRectOffset and CGRectInset, so this category could be cleaned up a bit (if not eliminated altogether).

提交回复
热议问题