Я согласен с ответом от zacherates.
Но вы можете сделать вызов intern () в ваших нелиберальных строках.
Из примера zacherates:
// ... but they are not the same object
new String("test") == "test" ==> false
Если вы ставите нелитеральное равенство строки, это правда
new String("test").intern() == "test" ==> true
Возможно, попробуйте реализовать метод делегата:
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
Вы могли бы рассматривать его как сквозную передачу (просто передавая обратно параметр reusingView), но каждый раз, когда он вызывается, вы будете знать, что представление приходит на экрана, когда пользователь прокручивает - тогда вы можете вычислить, сколько просмотров было смещено относительно этого центрального вида.
Размеры UIPickerView
довольно согласованы. Вместо того, чтобы создавать подклассы, вы могли бы наложить свой собственный UIView
поверх представления средства выбора, из которого вы можете отслеживать и измерять перемещения перетаскивания, прежде чем передавать эти касания в представление средства выбора.