2011-08-27 12 views
5

Quando aggiungo il mio dispositivo di scorrimento come visualizzazione secondaria di qualsiasi vista oltre self.view non funziona (non scivolare), ma funziona bene quando si è una sottoview di self.view. Puoi vederlo sulle altre viste oltre a self.view ma non funziona.UISlider non funziona quando diventa una visualizzazione secondaria di un UIView altri self.view

Ecco il mio codice:

alphaSlider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, 90, 10)]; 
    [alphaSlider setMinimumValue:0.01]; 
    [alphaSlider setMaximumValue:1]; 
    [alphaSlider setValue:0.5]; 
    [alphaSlider setUserInteractionEnabled:YES]; 
    [alphaSlider addTarget:self action:@selector(alphaSliderDidChange:) forControlEvents:UIControlEventValueChanged]; 
    alphaSlider.continuous = YES; 
[submenu addSubview:alphaSlider]; 

Un modo per risolvere questo problema?

risposta

9

Potrebbe essere che il sottomenu non è abilitato per l'interazione dell'utente.

[submenu setUserInteractionEnabled:YES]; 

Un'altra possibilità è che il telaio del cursore è fuori submenu.frame

Poiché la proprietà clipsToBounds di UIViews è per default NO, il dispositivo di scorrimento non essere troncata pur essendo al di fuori del telaio di sottomenu. Ciò significa che la cornice del sottomenu non copre il cursore e non c'è modo di passare gli eventi tattili dal sottomenu al cursore del sottomenu. Imposta il colore di sfondo del sottomenu e conferma che il cursore sia posizionato interamente nella cornice del sottomenu.

[submenu setBackgroundColor:[UIColor blueColor]]; 

Il frame del sottomenu potrebbe essere qualcosa come (0, 0, 0, 0).

Includere

NSLog(@"%f, %f, %f, %f", submenu.frame.origin.x, submenu.frame.origin.y, submenu.frame.size.width, submenu.frame.size.height); 

Si potrebbe anche fare

[submenu setClipsToBounds:YES]; 

e se il dispositivo di scorrimento scompare, poi telaio del sottomenu è male.

6

Verificare che l'altezza del telaio del dispositivo di scorrimento non è troppo piccolo per consentire l'interazione. 10 pt è probabilmente troppo piccolo.

partire in iOS 8, i miei cursori anche smesso di funzionare.

In passato, l'altezza del frame di UIViews come UISlider, UISwitch e UIPickerView è stata fissata su un valore predefinito. È possibile impostare l'altezza della cornice, ma sarebbe ignorata. Invece di cercare di ricordare, "Qual è l'altezza di un UISlider in Landscape su iPad/iPhone?", Avevo impostato l'altezza su 0 e lasciato che il SO assegni il valore predefinito.

David Braun's risposta mi ha portato a capire che le mie cornici UISlider avevano altezza 0 che l'interazione utente disabilitato.

+0

Non avrei mai pensato di controllare da solo le dimensioni del telaio. +1 – oarfish

+0

Grazie ... Nel mio caso il cursore era all'interno di StackView che stava causando problemi. Solo aggiunto il vincolo di altezza, abbraccio e valore di resistenza alla compressione per il cursore e ha funzionato. – niks

-1

Ho avuto un problema simile, in cui il dispositivo di scorrimento non ha avuto la linea orizzontale, basta il pulsante bianco e non ha risposto affatto. Sulla base di quanto sopra ho capito che i miei cursori erano più larghi della mia area di sicurezza. Imposta alcuni vincoli sui 2 lati, e ora funziona bene.

Problemi correlati