我正在創建此IB_Designable類。它就像一個滑塊。看照片。這兩個元素都創建了很小的伸縮性UIImages
。使UIImage在@IB_Designable上的新位置重新繪製
我有這個紅色的方塊是66x66角。這個正方形必須在灰色矩形內的X上滑動。
我創建這個類:
HEADER
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface MyClass : UIView
// minimum and maximum slider value
@property (assign, nonatomic) IBInspectable CGFloat minimumValue;
@property (assign, nonatomic) IBInspectable CGFloat maximumValue;
@property (assign, nonatomic) IBInspectable CGFloat value;
@end
實現
#import "MyClass.h"
@interface MyClass() {
__weak IBOutlet UIView *topContainer;
CGFloat minimumThumbCoordinate;
CGFloat maximumThumbCoordinate;
}
@property (weak, nonatomic) IBOutlet UIImageView *thumb;
@end
@implementation MyClass
- (void)awakeFromNib {
[super awakeFromNib];
// topContainer contains everything
CGRect topContainerBounds = [topContainer bounds];
CGRect thumbBounds = [self.thumb bounds];
CGFloat topContainerWidth = CGRectGetWidth(topContainerBounds);
CGFloat thumbWidth = CGRectGetWidth(thumbBounds);
minimumThumbCoordinate = floorf(thumbWidth/2.0f);
maximumThumbCoordinate = floorf(topContainerWidth - minimumThumbCoordinate);
}
-(void)setValue:(CGFloat)value {
if ((value < self.minimumValue) || (value > self.maximumValue)) return;
// normalize values
CGFloat minimumValueNormalized = self.minimumValue;
CGFloat maximumValueNormalized = self.maximumValue;
CGFloat desiredValue = value;
if ((minimumValueNormalized < 0) && (maximumValueNormalized > 0)) {
CGFloat absoluteMinimum = fabsf(self.minimumValue);
minimumValueNormalized = 0;
maximumValueNormalized += absoluteMinimum;
desiredValue += absoluteMinimum;
}
CGFloat percentage = desiredValue/maximumValueNormalized;
// find coordinate
CGFloat coordinateRange = maximumThumbCoordinate - minimumThumbCoordinate;
CGFloat relativeCoordinate = percentage * coordinateRange;
CGPoint center = CGPointMake(relativeCoordinate, self.thumb.center.y);
[self.thumb setCenter: center];
}
的問題是setValue
方法不會使拇指移動當我設置界面生成器的價值......任何想法?
對不起,關於setCenter。我已更正了代碼。將代碼複製到此處時出現錯字。不,沒有辦法讓IBOutlet可以檢查。我的IBDesignable具有代碼第一部分顯示的可檢查屬性。 – SpaceDog