Комплексен CAT-преход

Опитвам се да създам CATransition към UIView.

Искам да преместя UIView надясно и в същото време (и винаги в една и съща точка) да го завъртя.

По-добре се обяснява с изображението.

Мога да го преместя с CATransition, а също и да го завъртя с CABasicAnimation, но не знам как да ги направя заедно.

Благодаря.

Комплексен преход


person saimonx    schedule 04.05.2011    source източник
comment
Искате ли да преминава с L-образна форма между тях?   -  person    schedule 04.05.2011
comment
да, точно като изображението   -  person saimonx    schedule 04.05.2011


Отговори (2)


-(void)scaleAndRotate:(UIImageView*)myView andAngle:(float)angle {

CGAffineTransform scaleTrans = CGAffineTransformMakeScale(1.5,1.5);
CGAffineTransform rotateTrans =CGAffineTransformMakeRotation(angle * M_PI / 180);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
myView.transform = CGAffineTransformConcat(scaleTrans, rotateTrans);
[UIView commitAnimations];

}

В горния метод: заменете & с това, което искате ... Ще работи,,, със сигурност :) Всичко най-добро

person Abhishek Bedi    schedule 24.05.2011

Трябва да обмислите да направите две копия на изображението, да завъртите едното и да ги маскирате и двете, така че да могат да бъдат поставени едно до друго във формата на L.

Използвайки тази техника, вие ще правите два превода наведнъж (премествайки маската и основното изображение) към двете изображения A и T. Но забележете, че завъртането няма да бъде анимирано. Ще поставите изображение T в завъртяно състояние веднага и просто ще го разкриете, като го преместите под маската (като едновременно правите обратното на изображение A, за да го скриете). Така че всъщност не комбинирате превод и ротация в една анимация, а по-скоро използвате само превод с маска както върху оригиналното изображение (A), така и върху завъртяно копие (T).

Ще трябва да маскирате лявата страна на единия и дясната страна на другия. Формата на маската трябва да има противоположен ъгъл от 45 градуса върху двете, тогава можете да съберете тези ъглови ръбове, за да образуват L. С напредването на времето просто премествате маската във всяка, докато първото изображение изчезне напълно и вие остана с вашето крайно състояние.

Маскирането е трудната част. Вижте този отговор относно маскирането на UIImage с CoreGraphics: маскиране на UIImage

Маската PNG би била просто правоъгълник с една страна под ъгъл от 45 градуса. Можете да го създадете в редактора на изображения по ваш избор (Photoshop, GIMP, Acorn).

Забележка: този подход ще създаде остър ръб в ъгъла. Другият подход би бил да изкривите пикселите около този ъгъл, докато се движат от вертикално движение надолу към хоризонтално движение надясно. (Мисля) Това би било много по-ангажирано.

person RickDT    schedule 04.05.2011
comment
Не съм сигурен за коя част питате, но ще позная малкото за маскиране, тъй като това е най-трудното. Вижте този въпрос/отговор за маскиране на UIImage с CoreGraphics: stackoverflow.com/questions/2776747/masking-a-uiimage - person RickDT; 05.05.2011