2013-07-05 3 views
2

Я хочу обратить в прошивке на pentagon с UISliders как circumradii (набором пять UISliders происходит в разных направлениях и происходящем от центра пятиугольника). В настоящее время я повернул пять UISliders, используя общий anchorPoint (:setAnchorPoint), но они, похоже, не происходят из общей точки. Как я могу это сделать? Нужно ли мне начинать работу над настраиваемым элементом управления? Что еще от Quartz2D я могу использовать? Некоторые конкретные показатели будут полезны (пожалуйста, не просто сказать: «Использование Quartz2D»)Пентагона с UISLiders как circumradii

Вот что я достиг Imgur

И вот что я хочу достичь Imgur

+0

Если вы не заинтересованы в использовании Quartz2D, тогда приступайте к работе с использованием рамки CoreGraphics. – Tirth

+0

Добавьте скриншот того, что у вас есть, и что вы хотите, и код, который вы используете в данный момент. – Wain

+0

Не то, чтобы я не хотел использовать Quartz2D, я просто хотел узнать, подходит ли его лучший подход. Я напряжен по графику и поэтому не могу позволить себе попробовать свои силы в разных вариантах. – SagarU

ответ

1

Я определил различные слайдеры как IBOutletCollection, поэтому я могу получить к ним доступ в виде массива в контроллере. Затем я запускаю следующий код в viewWillAppear:

CGPoint viewCenter = self.view.center; 

for (NSInteger i = 0, count = self.sliders.count; i < count; ++i) { 
    UISlider *slider = self.sliders[i]; 

    CGFloat angle = 2.0f * M_PI/count; 

    CALayer *layer = slider.layer; 
    layer.anchorPoint = CGPointMake(0.0f, 0.5f); 
    layer.position = viewCenter; 
    layer.transform = CATransform3DMakeRotation(i * angle - M_PI_2, 0.0f, 0.0f, 1.0f); 
} 

Вот скриншот результата:

Circumradii sliders

Является ли это, что вы хотите?

+0

То точно, что я намеревался сделать. Вы вносили какие-либо изменения в xib? Я не могу воспроизвести результаты здесь. – SagarU

+0

Нет, просто поместите слайдеры в любом месте XIB, они все равно будут перемещены. Используете ли вы автоматический макет? – nubbel

+0

Voila! Ты решил это! Благодарю. Мне нужен бит anchorPoint. При добавлении даже мой старый код работал нормально. Еще раз спасибо! – SagarU

0

Я бы попробовать просто для поворота ползунков. Следующий код должен помочь:

firstSlider.transform=CGAffineTransformRotate(firstSlider.transform,72.0/180*M_PI); 
secondSlider.transform=CGAffineTransformRotate(secondSlider.transform,144.0/180*M_PI); 
//and so on 

72.0/180*M_PI является преобразование градусов в радианы.

Надеюсь, это поможет.

P.S. у меня нет макроса рядом, чтобы проверить, работает ли он

+0

Слайдеры, похоже, начинают свою центральную точку. Поэтому я один конец ползуна в качестве опорной точки для всех и в XIb, положил их поверх друг друга (все пять ползунков в одном месте, те же координаты). Я получил те же результаты, что и в изображении, который я приложил в своем вопросе. – SagarU