Я создаю этот класс IB_Designable. Это похоже на слайдер. См. Изображение. Оба элемента создаются с небольшим растягиваемостью UIImages
.Создание UIImage перерисовки на новое место на @IB_Designable
У меня есть этот красный квадрат, который 66x66 пт. Этот квадрат должен скользить по X внутри серого прямоугольника.
У меня создать этот класс:
ЗАГОЛОВКА
#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