У меня есть пользовательский uislider внутри UicollectionViewCell . Я хотел бы иметь возможность переместить палец ползунка, касаясь в любом месте на ячейке (на фиолетовом бите). Например, если бы я посадил пальцем в верхний правый угол ячейки и скользить вниз, я бы хотел, чтобы большой палец скользил вниз с ее текущей позиции (-19.0 в этом случае), вместо того, чтобы прыгать вверх. /> Вот мой код: < /p>
@implementation CDCFaderSlider
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame: frame];
if (self) {
[self setOpaque: true];
[self setTransform: CGAffineTransformMakeRotation((CGFloat)(M_PI * -0.5f))];
[self constructSlider];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder: aDecoder];
if (self) {
[self setTransform: CGAffineTransformMakeRotation((CGFloat)(M_PI * -0.5f))];
[self constructSlider];
}
return self;
}
#pragma mark - UIControl touch event tracking
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint touchPoint = [touch locationInView: self];
if (CGRectContainsPoint(CGRectInset(self.thumbRect, -12.0, -12.0), touchPoint)) {
[self positionAndUpdateValueView];
[self fadeValueViewInAndOut: true];
}
return [super beginTrackingWithTouch: touch withEvent: event];
}
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
[self positionAndUpdateValueView];
return [super continueTrackingWithTouch: touch withEvent: event];
}
- (void)cancelTrackingWithEvent:(UIEvent *)event {
[self fadeValueViewInAndOut: false];
[super cancelTrackingWithEvent: event];
}
- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
[self fadeValueViewInAndOut: false];
[super endTrackingWithTouch: touch withEvent: event];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[self fadeValueViewInAndOut: false];
[super touchesEnded: touches withEvent: event];
}
- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event {
CGRect bounds = self.bounds;
bounds = CGRectInset(bounds, 0, -70);
return CGRectContainsPoint(bounds, point);
}
#pragma mark - Helper methods
- (void)constructSlider {
self.valueView = [[CDCFaderValueView alloc] initWithFrame: CGRectZero];
self.valueView.backgroundColor = UIColor.clearColor;
self.valueView.alpha = 0.0;
self.valueView.transform = CGAffineTransformMakeRotation((CGFloat)(M_PI * 0.5));
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self addSubview: self.valueView];
});
}
- (void)fadeValueViewInAndOut:(BOOL)aFadeIn {
[UIView animateWithDuration: 0.5 animations:^{
if (aFadeIn) {
self.valueView.alpha = 0.8;
} else {
self.valueView.alpha = 0.0;
}
} completion:^(BOOL finished){
}];
}
- (void)positionAndUpdateValueView {
CGRect ThumbRect = self.thumbRect;
CGRect popupRect = CGRectOffset(ThumbRect, (CGFloat)floor(ThumbRect.size.width * 0.2), (CGFloat) - floor(ThumbRect.size.height * 0.5));
self.valueView.frame = CGRectInset(popupRect, -30, -10);
self.valueView.value = faderDBValues[(NSInteger)self.value];
}
#pragma mark - Property
- (CGRect)thumbRect {
CGRect trackRect = [self trackRectForBounds: self.bounds];
CGRect thumbR = [self thumbRectForBounds: self.bounds trackRect: trackRect value: self.value];
return thumbR;
}
- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {
if (self.count > 4) {
[super sendAction: action to: target forEvent: event];
self.count = 0;
} else {
self.count++;
}
if (self.tracking == 0) {
[super sendAction: action to: target forEvent: event];
}
}
@end
Подробнее здесь: https://stackoverflow.com/questions/795 ... -the-thumb
UISlider FIMM, чтобы двигаться, не касаясь большого пальца ⇐ IOS
Программируем под IOS
-
Anonymous
1741811710
Anonymous
У меня есть пользовательский uislider внутри UicollectionViewCell . Я хотел бы иметь возможность переместить палец ползунка, касаясь в любом месте на ячейке (на фиолетовом бите). Например, если бы я посадил пальцем в верхний правый угол ячейки и скользить вниз, я бы хотел, чтобы большой палец скользил вниз с ее текущей позиции (-19.0 в этом случае), вместо того, чтобы прыгать вверх. /> Вот мой код: < /p>
@implementation CDCFaderSlider
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame: frame];
if (self) {
[self setOpaque: true];
[self setTransform: CGAffineTransformMakeRotation((CGFloat)(M_PI * -0.5f))];
[self constructSlider];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder: aDecoder];
if (self) {
[self setTransform: CGAffineTransformMakeRotation((CGFloat)(M_PI * -0.5f))];
[self constructSlider];
}
return self;
}
#pragma mark - UIControl touch event tracking
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint touchPoint = [touch locationInView: self];
if (CGRectContainsPoint(CGRectInset(self.thumbRect, -12.0, -12.0), touchPoint)) {
[self positionAndUpdateValueView];
[self fadeValueViewInAndOut: true];
}
return [super beginTrackingWithTouch: touch withEvent: event];
}
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
[self positionAndUpdateValueView];
return [super continueTrackingWithTouch: touch withEvent: event];
}
- (void)cancelTrackingWithEvent:(UIEvent *)event {
[self fadeValueViewInAndOut: false];
[super cancelTrackingWithEvent: event];
}
- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
[self fadeValueViewInAndOut: false];
[super endTrackingWithTouch: touch withEvent: event];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[self fadeValueViewInAndOut: false];
[super touchesEnded: touches withEvent: event];
}
- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event {
CGRect bounds = self.bounds;
bounds = CGRectInset(bounds, 0, -70);
return CGRectContainsPoint(bounds, point);
}
#pragma mark - Helper methods
- (void)constructSlider {
self.valueView = [[CDCFaderValueView alloc] initWithFrame: CGRectZero];
self.valueView.backgroundColor = UIColor.clearColor;
self.valueView.alpha = 0.0;
self.valueView.transform = CGAffineTransformMakeRotation((CGFloat)(M_PI * 0.5));
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self addSubview: self.valueView];
});
}
- (void)fadeValueViewInAndOut:(BOOL)aFadeIn {
[UIView animateWithDuration: 0.5 animations:^{
if (aFadeIn) {
self.valueView.alpha = 0.8;
} else {
self.valueView.alpha = 0.0;
}
} completion:^(BOOL finished){
}];
}
- (void)positionAndUpdateValueView {
CGRect ThumbRect = self.thumbRect;
CGRect popupRect = CGRectOffset(ThumbRect, (CGFloat)floor(ThumbRect.size.width * 0.2), (CGFloat) - floor(ThumbRect.size.height * 0.5));
self.valueView.frame = CGRectInset(popupRect, -30, -10);
self.valueView.value = faderDBValues[(NSInteger)self.value];
}
#pragma mark - Property
- (CGRect)thumbRect {
CGRect trackRect = [self trackRectForBounds: self.bounds];
CGRect thumbR = [self thumbRectForBounds: self.bounds trackRect: trackRect value: self.value];
return thumbR;
}
- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {
if (self.count > 4) {
[super sendAction: action to: target forEvent: event];
self.count = 0;
} else {
self.count++;
}
if (self.tracking == 0) {
[super sendAction: action to: target forEvent: event];
}
}
@end
Подробнее здесь: [url]https://stackoverflow.com/questions/79504242/uislider-thumb-to-move-without-touching-the-thumb[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия