20 секунд - это не нормально, вы, вероятно, одновременно используете процессор для чего-то другого, есть ли у вас какие-либо анимации / переходы, которые вы делаете во время преобразования?
Это также может сделать этот шаг более плавным с помощью Grand Central Dispatch (GCD):
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ ... });