Pertanyaan iphone UIImageLihat rotasi


Adakah yang bisa memberitahu saya bagaimana cara memutar gambar dalam gerakan melingkar


9
2017-09-14 11:42


asal


Jawaban:


Anda dapat memutar tampilan, dengan sejumlah radian, terlepas dari apakah itu kurang dari rotasi penuh atau banyak kelipatan rotasi penuh, tanpa harus membagi rotasi menjadi beberapa bagian. Sebagai contoh, kode berikut akan memutar tampilan, sekali per detik, untuk jumlah detik tertentu. Anda dapat dengan mudah memodifikasinya untuk memutar tampilan dengan sejumlah rotasi tertentu, atau oleh sejumlah radian.

- (void) runSpinAnimationWithDuration:(CGFloat) duration;
{
    CABasicAnimation* rotationAnimation;
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ];
    rotationAnimation.duration = duration;
    rotationAnimation.cumulative = YES;
    rotationAnimation.repeatCount = 1.0; 
    rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

    [myView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}

28
2017-09-14 19:42



berdasarkan jawaban mahboudz, Anda dapat mengaturnya agar berputar tanpa batas dengan mengatur:
rotationAnimation.repeatCount = HUGE_VALF;


3
2018-05-30 23:40



Jika maksud Anda, "Bagaimana Anda membuat gambar mengikuti jalur melingkar?", Maka pseudocode akan menjadi:

image.x = circleCentre.x + cos(angle) * circleRadius;
image.y = circleCentre.y + sin(angle) * circleRadius;
angle += 5;

2
2017-09-14 12:06



Pertanyaan ini menanyakan hal yang sama, meskipun dengan kata yang berbeda. Jawaban dalam pertanyaan itu, begitu juga dalam pertanyaan ini harus menyediakan cara untuk menganimasikan UIView (UIImageView hanyalah subkelas ini) tentang pusatnya untuk 360 derajat atau lebih.


1
2017-09-14 13:35



Membuat animasi

- (CABasicAnimation *)spinAnimationWithDuration:(CGFloat)duration clockwise:(BOOL)clockwise repeat:(BOOL)repeats
{
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    anim.toValue = clockwise ? @(M_PI * 2.0) : @(M_PI * -2.0);
    anim.duration = duration;
    anim.cumulative = YES;
    anim.repeatCount = repeats ? CGFLOAT_MAX : 0;
    return anim;
}

Tambahkan ke tampilan

CABasicAnimation *animation = [self spinAnimationWithDuration:1.0 clockwise:YES repeat:YES];
[self.spinningView.layer addAnimation:animation forKey:@"rotationAnimation"];

Bagaimana jawaban ini berbeda dari jawaban @ mahboudz? Anda akan memiliki kode cara bersih jika sebagian besar fungsi Anda mengembalikan objek, bukan hanya memanipulasi beberapa objek di sana-sini.


1
2017-08-10 08:46