У меня есть UIScrollView. Я хочу сделать так, чтобы когда пользователь прокручивает его - на заднике прокручивалась картинка. Картинка генерируется программно и хранится в памяти. Её высота - высота экрана устройства, а ширина чуть больше. Но почему-то на моём iPhone 4S это приложение тормозит. Это кажется мне странным, учитывая, что в Галерее я могу увеличить любую фотографию и скроллинг будет идеально плавным. Очевидно, что я что-то сделал не так.
Вот, что я делаю, когда пользователь прокручивает ScrollView:
func scrollViewDidScroll(scrollview: UIScrollView) {
// Вычисляем смещение картинки
var pageSize: Float = Float(scrollView.bounds.size.width)
var page: Float = floorf((Float(scrollview.contentOffset.x) - pageSize / 2.0) / pageSize) + 1
if (page >= Float(levelPagesCount)) {
page = Float(levelPagesCount) - 1;
}
else if (page < 0) {
page = 0;
}
pageControl.currentPage = Int(page)
var dx = scrollview.contentOffset.x
// Когда знаем смещение - можем вырезать нужную часть изображения
let queue = NSOperationQueue()
var cgimg: CGImageRef?
var drawn = false
// Запускаем функцию вырезания в отдельном потоке
queue.addOperationWithBlock() {
if(!self.locked) {
self.locked = true
cgimg = self.imageClass!.getImage(dx)
drawn = true
}
NSOperationQueue.mainQueue().addOperationWithBlock() {
if(drawn) {
// Помещаем результат в ImageView
self.myImageView!.layer.contents = cgimg
self.locked = false
}
}
}
}
А вот, как я "нарезаю" изображение:
public func getImage(xOffset: CGFloat) -> CGImage {
// Здесь 'img' - та самая "широкая" картинка
return CGImageCreateWithImageInRect(img, CGRectMake(xOffset, 0, imgWidth, imgHeight))!
}
Возможно я допустил ошибку, а возможно всё решение неверное в принципе.