2013-05-17 1 views
0

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

проблема заключается в том, что если я применить перевод после 90 градусов перевести левый перевести сверху и точка привязки не центр зрения после перевода

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    // ImageView 
    v = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 768, 500)]; 
    [v setBackgroundColor:[UIColor redColor]]; 

    // ImageView's Image 
    UIImage *img = [UIImage imageNamed:@"_my.jpg"]; 
    [v setImage:img]; 
    v.contentMode = UIViewContentModeScaleAspectFit; 
    v.layer.anchorPoint = CGPointMake(0.5, 0.5); 
    [self.view setBackgroundColor:[UIColor clearColor]]; 

    // UiView containing ImageView 
    vc = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 768, 500)]; 
    [vc addSubview:v]; 
    [self.view addSubview:vc]; 
} 

- (IBAction)Click:(id)sender { 
    // Translate 
    if ([sender tag] == 1) { 
     CGAffineTransform t0 = v.transform; 
     CGAffineTransform t1 = CGAffineTransformTranslate(t0, 10.0, 0.0); 
     v.transform = t1; 
    } 
    // Rotate 
    if ([sender tag] == 2) { 
     CGAffineTransform t0 = v.transform; 
     CGAffineTransform t1 = CGAffineTransformRotate(t0, DEGREES_TO_RADIANS(10)); 
     v.transform = t1; 
    }  
} 

кто-нибудь знает, как я могу держать центр зрения в качестве точки привязки и перевести после вращение для правильной работы?

ТХ

+0

простой способ это удалить перевод, применить вращение, а затем применить перевести обратно http://en.wikipedia.org/wiki/Transformation_(function) – SAKrisT

+0

мне нужно перевести, масштаб и поворот действиям несколько раз любой заказ, цель состоит в том, что пользователь может делать все, что захочет, с изображением, чтобы оно соответствовало ему в области обрезки. –

+0

Хорошо, но в любом случае у него должен быть правильный порядок трансформации, проверьте это http://www.cosc.brocku.ca/ Предложения/3P98/курс/лекции/2d_3d_xforms / – SAKrisT

ответ

0

Трансформации с Origin

Однако, особенно в 2D, вам часто необходимо добавить смещение начала координат к вашей трансформации. Это, как правило, добавляет к самому начало, и должно быть сведено на нет тоже, так что:

// Мировой Матрица с Origin

-OriginTranslation * Scale * Rotation * PositionTranslation 

То же самое можно сделать с помощью матрицы вида, но добавить его в конец и на этот раз вы не отрицают его:

// Вид матрицы с Origin

-PositionTranslation * -Rotation * Zoom * OriginTranslation 

Трансформации с Selective происхождения

Есть также некоторые случаи, когда вы хотите иметь смещение источника, но вы хотите, чтобы это повлияло только на ваш масштаб и вращение, но не на ваш перевод. Способ справиться с этим состоит в том, чтобы отменить преобразование источника перед достижением компонента перевода. Например, с мировой матрицей:

Я не помню, как именно преобразование применяется для просмотра, одно из которых должно быть выполнено.

// Мир Матрица с Origin для масштаба и вращения

-OriginTranslation * Scale * Rotation * OriginTranslation * PositionTranslation 

и матрица вида:

// Вид матрицы с Origin

-PositionTranslation * -OriginTranslation * -Rotation * Zoom * OriginTranslation 

Пример трансформации без происхождени, порядок: масштаб * вращение * translatio п

enter image description here