4

Mac開発は初めてですが、 imagev =[NSArrayarrayWithObjectsのようなメソッドはありますか

iOSでやっていることやMacでやりたいことのようなものが必要です。

imageVie.animationImages = [NSArray arrayWithObjects:
 [UIImage imageNamed:@"1.png"],[UIImage imageNamed:@"2.png"],
 [UIImage imageNamed:@"3.png"],[UIImage imageNamed:@"4.png"],
 [UIImage imageNamed:@"5.png"],[UIImage imageNamed:@"6.png"],
 [UIImage imageNamed:@"7.png"] ,nil];

iPhoneで、どのようにアニメーション化できますか

よろしく

4

5 に答える 5

4

この問題に対して Core Animation アプローチを使用している人を見つけました。少し修正しました。必要がある@import QuartzCore;

- (void)awakeFromNib
{
    CALayer *layer = [CALayer layer];
    NSMutableArray *spinnerImages = [NSMutableArray arrayWithCapacity:30u];
    for (NSUInteger i = 0; i < 30; ++i)
    {
        NSString *imageName = [NSString stringWithFormat:@"spinner%@", @(i)];
        [spinnerImages addObject:[NSImage imageNamed:imageName]];
    }
    self.spinnerImages = spinnerImages;
    layer.frame = self.imageView.bounds;
    [self.imageView setLayer:layer]; // This view is just a container for the layer. Its frame can be managed by a xib.
    self.imageView.wantsLayer = YES;

    self.spinnerLayer = layer;
}

次に、次のようにアニメーション化できます。

- (void)stopAnimating
{
    if ([self.layer.animationKeys containsObject:kAnimationKey])
    {
        [self.layer removeAnimationForKey:kAnimationKey];
    }
}

- (void)startAnimating
{
    if ([self.layer.animationKeys containsObject:kAnimationKey])
    {
        return;
    }
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:kAnimationKey];
    [animation setCalculationMode:kCAAnimationDiscrete];
    [animation setDuration:1.0f];
    [animation setRepeatCount:HUGE_VALF];
    [animation setValues:self.spinnerImages];
    [self.spinnerLayer addAnimation:animation forKey:kAnimationKey];
}
于 2015-07-30T15:52:37.767 に答える
1

ココアには のようなものはありませんanimatedImageWithImages:duration:。Cocoa の画像は、空間 (解像度が異なる) と色深度が異なる場合がありますが、時間は異なります。1 つの画像は常に静止画像であり、アニメーション化されることはありません。

(アニメーション GIF には例外があるかもしれませんが、GIF はフレームごとに 255 または 256 を超える色を表示できず、部分的な透明度をサポートしていません。さらに、NSImage または CGImage 機構を使用して GIF を作成または表示しようとはしていません。 )

あなたがする必要があるのは、画像ではなくムービーを作成することです。ムービーに画像を追加し、各画像の長さを変えて、必要な再生速度を実現します。次に、必要に応じてコントローラーを非表示にして、ムービー ビューでムービーを表示します。

于 2012-12-28T06:46:20.033 に答える
1

スウィフト 4.2

を追加するまで、以前の回答を機能させることができませんでしたbeginTimeSwift 3一部の定数も変更されたため。そこで、ソリューションを に変換しましたSwift 4.2CALayerまた、拡張として作成すると便利だと思いました。

extension CALayer {  

static func image(sequence: [NSImage], duration: CFTimeInterval? = nil, frame: CGRect? = nil) -> CALayer {

    let layer = CALayer()
    if let f = frame { layer.frame = f }
    layer.autoresizingMask = [.layerWidthSizable, .layerHeightSizable]

    let keyPath = "contents"

    let keyFrameAnimation = CAKeyframeAnimation(keyPath: keyPath)
    keyFrameAnimation.values = sequence
    keyFrameAnimation.calculationMode = .discrete
    keyFrameAnimation.fillMode = .forwards
    keyFrameAnimation.duration = duration ?? CFTimeInterval(sequence.count / 18)
    keyFrameAnimation.repeatCount = Float.infinity
    keyFrameAnimation.autoreverses = false
    keyFrameAnimation.isRemovedOnCompletion = false
    keyFrameAnimation.beginTime = 0.0

    layer.add(keyFrameAnimation, forKey: keyPath)

    return layer

}
}

のように使う

let sequenceLayer = CALayer.image(sequence: imageSequence, duration: 0.55, frame: yourView.bounds)
于 2018-12-27T14:12:36.967 に答える