Как я панорамирую изображение в UIImageView?

Интерполяция строк - это компилятор, а не библиотека.

Отверстия не являются именами, а выражениями:

var r = new Rectangle(5, 4);
var s = $"area: {r.Width + r.Heigh}":

Как вы это сделаете для локализации, так как вы намерены?

Даже r существует только во время компиляции. В IL это просто позиция в стеке переменных метода.

Я сделал то, что вы намереваетесь сделать для ресурсов и файлов конфигурации.

Поскольку вы можете иметь только конечный набор «переменные» для замены, то, что я сделал, был массив (или словарь, если вы предпочитаете), и используйте регулярное выражение для замены имен в отверстиях индексом. То, что я даже допустил для спецификаторов формата.

26
задан Chris Hanson 7 January 2009 в 16:39
поделиться

2 ответа

Brad Larson указал на меня вниз правильная дорога с его предложением для помещения UIImageView внутренняя часть UIScrollView.

В конце я поместил UIImageView внутренняя часть UIScrollView и установил scrollView's contentSize и imageView границы, чтобы быть тем же размером как изображение в UIImage:

UIImage* image = imageView.image;
imageView.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
scrollView.contentSize = image.size;

Затем я могу анимировать scrollView's contentOffset для достижения хорошего эффекта панорамирования:

[UIView beginAnimations:@"pan" context:nil];
[UIView setAnimationDuration:animationDuration];
scrollView.contentOffset = newRect.origin;
[UIView commitAnimations];

В моем особом случае, я панорамирую к случайному пространству в изображении. Чтобы найти, что надлежащее реагирует на панорамирование к [1 118] и надлежащая продолжительность для получения хорошей постоянной скорости, я использую следующее:

UIImage* image = imageView.image;

float xNewOrigin = [TCBRandom randomIntLessThan:image.size.width - scrollView.bounds.size.width];
float yNewOrigin = [TCBRandom randomIntLessThan:image.size.height - scrollView.bounds.size.height];

CGRect oldRect = scrollView.bounds;
CGRect newRect = CGRectMake(
    xNewOrigin,
    yNewOrigin, 
    scrollView.bounds.size.width,
    scrollView.bounds.size.height);

float xDistance = fabs(xNewOrigin - oldRect.origin.x);
float yDistance = fabs(yNewOrigin - oldRect.origin.y);
float hDistance = sqrtf(powf(xDistance, 2) + powf(yDistance, 2));
float hDistanceInPixels = hDistance;

float animationDuration = hDistanceInPixels / speedInPixelsPerSecond;

я использую speedInPixelsPerSecond из [1 111], но другие приложения могли бы хотеть использовать различное значение.

39
ответ дан TALlama 15 October 2019 в 07:01
поделиться

Я настоятельно рекомендовал бы включение Вашего UIImageView в UIScrollView. Имейте эти UIImageView, отображают полный образ и устанавливают contentSize на UIScrollView для совпадения с Вашим UIImageView's размер. Ваш window в изображение будет размер эти UIScrollView, и при помощи scrollRectToVisible:animated: можно панорамировать к конкретным областям на изображении анимированным способом.

, Если Вы не хотите, чтобы полосы прокрутки появились, можно установить showsHorizontalScrollIndicator и showsVerticalScrollIndicator свойства к [1 110].

UIScrollView также обеспечивает масштабирующую повышение функциональность, которая может или не может быть полезна для Вас.

47
ответ дан KlimczakM 15 October 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: