iPhone «διαφάνεια για να ξεκλειδώσει» κινούμενα σχέδια

ψήφοι
70

Οποιεσδήποτε ιδέες για το πώς η Apple εφαρμόσει την «διαφάνεια για να ξεκλειδώσει» (επίσης «διαφάνεια για να απενεργοποιήσετε» είναι ένα άλλο πανομοιότυπο παράδειγμα) κινούμενα σχέδια;

Έχω σκεφτεί κάποιο είδος εμψύχωση μάσκας - αλλά συγκάλυψης δεν είναι διαθέσιμη για το iPhone OS για λόγους απόδοσης.

Υπάρχει κάποιο ιδιωτικό αποτέλεσμα API (όπως SuckEffect) ότι θα μπορούσε να χρησιμοποιηθεί εκεί; Ένας τύπος επίκεντρο του αποτελέσματος; Μερικά πυρήνα Animation πράγμα;

Επεξεργασία: Είναι σίγουρα δεν είναι μια σειρά από φωτογραφίες. Έχω δει παραδείγματα είναι να επεξεργαστείτε μια τιμή plist ή κάτι τέτοιο και να προσαρμόσετε το string για jailbroken iPhones.

Δημοσιεύθηκε 13/01/2009 στις 06:21
πηγή χρήστη
Σε άλλες γλώσσες...                            


12 απαντήσεις

ψήφοι
69

Αυτό μπορεί να γίνει easilly με τη χρήση πυρήνα Animation, εμψύχωση ένα στρώμα μάσκας στο στρώμα εμφανίζει το κείμενο.

Δοκιμάστε αυτό σε κάθε απλό UIViewController (μπορείτε να ξεκινήσετε με ένα νέο έργο Xcode με βάση το View-based εφαρμογή πρότυπο έργο), ή να πάρουν το έργο Xcode μου εδώ :

Σημειώστε ότι το CALayer.maskακίνητο είναι διαθέσιμο μόνο στο iPhone OS 3.0 και νεότερες εκδόσεις.

- (void)viewDidLoad 
{
  self.view.layer.backgroundColor = [[UIColor blackColor] CGColor];

  UIImage *textImage = [UIImage imageNamed:@"SlideToUnlock.png"];
  CGFloat textWidth = textImage.size.width;
  CGFloat textHeight = textImage.size.height;

  CALayer *textLayer = [CALayer layer];
  textLayer.contents = (id)[textImage CGImage];
  textLayer.frame = CGRectMake(10.0f, 215.0f, textWidth, textHeight);

  CALayer *maskLayer = [CALayer layer];

  // Mask image ends with 0.15 opacity on both sides. Set the background color of the layer
  // to the same value so the layer can extend the mask image.
  maskLayer.backgroundColor = [[UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.15f] CGColor];
  maskLayer.contents = (id)[[UIImage imageNamed:@"Mask.png"] CGImage];

  // Center the mask image on twice the width of the text layer, so it starts to the left
  // of the text layer and moves to its right when we translate it by width.
  maskLayer.contentsGravity = kCAGravityCenter;
  maskLayer.frame = CGRectMake(-textWidth, 0.0f, textWidth * 2, textHeight);

  // Animate the mask layer's horizontal position
  CABasicAnimation *maskAnim = [CABasicAnimation animationWithKeyPath:@"position.x"];
  maskAnim.byValue = [NSNumber numberWithFloat:textWidth];
  maskAnim.repeatCount = HUGE_VALF;
  maskAnim.duration = 1.0f;
  [maskLayer addAnimation:maskAnim forKey:@"slideAnim"];

  textLayer.mask = maskLayer;
  [self.view.layer addSublayer:textLayer];

  [super viewDidLoad];
}

Οι εικόνες που χρησιμοποιούνται από αυτόν τον κώδικα είναι:

μάσκα Layer Layer κείμενο

Απαντήθηκε 06/05/2010 στις 04:24
πηγή χρήστη

ψήφοι
46

Ακόμα μια λύση, χρησιμοποιώντας μια μάσκα επιπέδου, αλλά, αντίθετα, εφιστά την κλίση με το χέρι και δεν απαιτεί εικόνες. View είναι η άποψη με την κινούμενη εικόνα, η διαφάνεια είναι ένα επίπλευσης από 0 - 1 τον προσδιορισμό του ύψους της διαφάνειας (1 = καμία διαφάνεια η οποία είναι άσκοπο), και gradientWidth είναι το επιθυμητό πλάτος της βαθμίδας.

CAGradientLayer *gradientMask = [CAGradientLayer layer];
 gradientMask.frame = view.bounds;
CGFloat gradientSize = gradientWidth / view.frame.size.width;
UIColor *gradient = [UIColor colorWithWhite:1.0f alpha:transparency];
NSArray *startLocations = @[[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:(gradientSize / 2)], [NSNumber numberWithFloat:gradientSize]];
NSArray *endLocations = @[[NSNumber numberWithFloat:(1.0f - gradientSize)], [NSNumber numberWithFloat:(1.0f -(gradientSize / 2))], [NSNumber numberWithFloat:1.0f]];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"locations"];

gradientMask.colors = @[(id)gradient.CGColor, (id)[UIColor whiteColor].CGColor, (id)gradient.CGColor];
gradientMask.locations = startLocations;
gradientMask.startPoint = CGPointMake(0 - (gradientSize * 2), .5);
gradientMask.endPoint = CGPointMake(1 + gradientSize, .5);

view.layer.mask = gradientMask;

animation.fromValue = startLocations;
animation.toValue = endLocations;
animation.repeatCount = HUGE_VALF;
animation.duration  = 3.0f;

[gradientMask addAnimation:animation forKey:@"animateGradient"];

SWIFT ΕΚΔΟΣΗ:

let transparency:CGFloat = 0.5
let gradientWidth: CGFloat = 40

let gradientMask = CAGradientLayer()
gradientMask.frame = swipeView.bounds
let gradientSize = gradientWidth/swipeView.frame.size.width
let gradient = UIColor(white: 1, alpha: transparency)
let startLocations = [0, gradientSize/2, gradientSize]
let endLocations = [(1 - gradientSize), (1 - gradientSize/2), 1]
let animation = CABasicAnimation(keyPath: "locations")

gradientMask.colors = [gradient.CGColor, UIColor.whiteColor().CGColor, gradient.CGColor]
gradientMask.locations = startLocations
gradientMask.startPoint = CGPointMake(0 - (gradientSize*2), 0.5)
gradientMask.endPoint = CGPointMake(1 + gradientSize, 0.5)

swipeView.layer.mask = gradientMask

animation.fromValue = startLocations
animation.toValue = endLocations
animation.repeatCount = HUGE
animation.duration = 3

gradientMask.addAnimation(animation, forKey: "animateGradient")

Swift 3

fileprivate func addGradientMaskToView(view:UIView, transparency:CGFloat = 0.5, gradientWidth:CGFloat = 40.0) {        
    let gradientMask = CAGradientLayer()
    gradientMask.frame = view.bounds
    let gradientSize = gradientWidth/view.frame.size.width
    let gradientColor = UIColor(white: 1, alpha: transparency)
    let startLocations = [0, gradientSize/2, gradientSize]
    let endLocations = [(1 - gradientSize), (1 - gradientSize/2), 1]
    let animation = CABasicAnimation(keyPath: "locations")

    gradientMask.colors = [gradientColor.cgColor, UIColor.white.cgColor, gradientColor.cgColor]
    gradientMask.locations = startLocations as [NSNumber]?
    gradientMask.startPoint = CGPoint(x:0 - (gradientSize * 2), y: 0.5)
    gradientMask.endPoint = CGPoint(x:1 + gradientSize, y: 0.5)

    view.layer.mask = gradientMask

    animation.fromValue = startLocations
    animation.toValue = endLocations
    animation.repeatCount = HUGE
    animation.duration = 3

    gradientMask.add(animation, forKey: nil)
}
Απαντήθηκε 15/01/2013 στις 03:55
πηγή χρήστη

ψήφοι
13

Μπορείτε να χρησιμοποιήσετε τη kCGTextClipλειτουργία σχεδίασης για να ορίσετε την διαδρομή αποκοπής και στη συνέχεια συμπληρώστε με μια κλίση.

// Get Context
CGContextRef context = UIGraphicsGetCurrentContext();
// Set Font
CGContextSelectFont(context, "Helvetica", 24.0, kCGEncodingMacRoman);
// Set Text Matrix
CGAffineTransform xform = CGAffineTransformMake(1.0,  0.0,
                                                0.0, -1.0,
                                                0.0,  0.0);
CGContextSetTextMatrix(context, xform);
// Set Drawing Mode to set clipping path
CGContextSetTextDrawingMode (context, kCGTextClip);
// Draw Text
CGContextShowTextAtPoint (context, 0, 20, "Gradient", strlen("Gradient")); 
// Calculate Text width
CGPoint textEnd = CGContextGetTextPosition(context);
// Generate Gradient locations & colors
size_t num_locations = 3;
CGFloat locations[3] = { 0.3, 0.5, 0.6 };
CGFloat components[12] = { 
    1.0, 1.0, 1.0, 0.5,
    1.0, 1.0, 1.0, 1.0,
    1.0, 1.0, 1.0, 0.5,
};
// Load Colorspace
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
// Create Gradient
CGGradientRef gradient = CGGradientCreateWithColorComponents (colorspace, components,
                                                              locations, num_locations);
// Draw Gradient (using clipping path
CGContextDrawLinearGradient (context, gradient, rect.origin, textEnd, 0);
// Cleanup (exercise for reader)

Ρύθμιση μια NSTimer και ποικίλλουν τις τιμές σε περιοχές ή χρησιμοποιήστε CoreAnimation να κάνουν το ίδιο.

Απαντήθηκε 13/01/2009 στις 15:49
πηγή χρήστη

ψήφοι
11

Έχω προσθέσει τον κώδικα που παρέχονται παραπάνω από τον Pascal ως κατηγορία για UILabel ώστε να μπορείτε να κινήσετε οποιαδήποτε UILabel με αυτό τον τρόπο. Εδώ είναι ο κώδικας. Μερικά παραμέτρους που μπορεί να χρειαστεί να αλλάξει για τα χρώματα του φόντου σας, κλπ Χρησιμοποιεί την ίδια μάσκα εικόνα που Pascal έχει ενσωματωθεί στην απάντησή του.

//UILabel+FSHighlightAnimationAdditions.m
#import "UILabel+FSHighlightAnimationAdditions.h"
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>

@implementation UILabel (FSHighlightAnimationAdditions)

- (void)setTextWithChangeAnimation:(NSString*)text
{
    NSLog(@"value changing");
    self.text = text;
    CALayer *maskLayer = [CALayer layer];

    // Mask image ends with 0.15 opacity on both sides. Set the background color of the layer
    // to the same value so the layer can extend the mask image.
    maskLayer.backgroundColor = [[UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.15f] CGColor];
    maskLayer.contents = (id)[[UIImage imageNamed:@"Mask.png"] CGImage];

    // Center the mask image on twice the width of the text layer, so it starts to the left
    // of the text layer and moves to its right when we translate it by width.
    maskLayer.contentsGravity = kCAGravityCenter;
    maskLayer.frame = CGRectMake(self.frame.size.width * -1, 0.0f, self.frame.size.width * 2, self.frame.size.height);

    // Animate the mask layer's horizontal position
    CABasicAnimation *maskAnim = [CABasicAnimation animationWithKeyPath:@"position.x"];
    maskAnim.byValue = [NSNumber numberWithFloat:self.frame.size.width];
    maskAnim.repeatCount = 1e100f;
    maskAnim.duration = 2.0f;
    [maskLayer addAnimation:maskAnim forKey:@"slideAnim"];

    self.layer.mask = maskLayer;
}

@end

//UILabel+FSHighlightAnimationAdditions.h
#import <Foundation/Foundation.h>
@interface UILabel (FSHighlightAnimationAdditions)

- (void)setTextWithChangeAnimation:(NSString*)text;

@end
Απαντήθηκε 19/04/2011 στις 00:49
πηγή χρήστη

ψήφοι
5

δεν είναι τόσο φρέσκα ... αλλά ίσως θα ήταν χρήσιμο

#define MM_TEXT_TO_DISPLAY          @"default"

#define MM_FONT             [UIFont systemFontOfSize:MM_FONT_SIZE]
#define MM_FONT_SIZE            25
#define MM_FONT_COLOR           [[UIColor darkGrayColor] colorWithAlphaComponent:0.75f];

#define MM_SHADOW_ENABLED           NO
#define MM_SHADOW_COLOR         [UIColor grayColor]
#define MM_SHADOW_OFFSET            CGSizeMake(-1,-1)


#define MM_CONTENT_EDGE_INSETS_TOP      0
#define MM_CONTENT_EDGE_INSETS_LEFT     10
#define MM_CONTENT_EDGE_INSETS_BOTTON   0
#define MM_CONTENT_EDGE_INSETS_RIGHT    10
#define MM_CONTENT_EDGE_INSETS          UIEdgeInsetsMake(MM_CONTENT_EDGE_INSETS_TOP, MM_CONTENT_EDGE_INSETS_LEFT, MM_CONTENT_EDGE_INSETS_BOTTON, MM_CONTENT_EDGE_INSETS_RIGHT)

#define MM_TEXT_ALIGNMENT           UITextAlignmentCenter
#define MM_BACKGROUND_COLOR         [UIColor clearColor]

#define MM_TIMER_INTERVAL           0.05f
#define MM_HORIZONTAL_SPAN          5


@interface MMAnimatedGradientLabel : UILabel {  

    NSString *textToDisplay;
    int text_length;

    CGGradientRef gradient;

    int current_position_x;
    NSTimer *timer;

    CGPoint alignment;

    CGGlyph *_glyphs;
}

- (id)initWithString:(NSString *)_string;

- (void)startAnimation;
- (void)toggle;
- (BOOL)isAnimating;

@end

#define RGB_COMPONENTS(r, g, b, a)  (r) / 255.0f, (g) / 255.0f, (b) / 255.0f, (a)

@interface MMAnimatedGradientLabel (Private)
- (CGRect)calculateFrame;
@end


@implementation MMAnimatedGradientLabel

// Missing in standard headers.
extern void CGFontGetGlyphsForUnichars(CGFontRef, const UniChar[], const CGGlyph[], size_t);

- (id)init {
    textToDisplay = MM_TEXT_TO_DISPLAY;
    return [self initWithFrame:[self calculateFrame]];
}

- (id)initWithString:(NSString *)_string {
    textToDisplay = _string;
    return [self initWithFrame:[self calculateFrame]];
}

-(id)initWithFrame:(CGRect)frame {  
    if (self = [super initWithFrame:frame]) {

        // set default values
        //
        self.textAlignment      = MM_TEXT_ALIGNMENT;
        self.backgroundColor    = MM_BACKGROUND_COLOR;
        self.font               = MM_FONT;
        self.text               = textToDisplay;
        self.textColor          = MM_FONT_COLOR;

        if (MM_SHADOW_ENABLED) {
            self.shadowColor        = MM_SHADOW_COLOR;
            self.shadowOffset       = MM_SHADOW_OFFSET;
        }

        text_length = -1;

        CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
        CGFloat colors[] =
        {       
            RGB_COMPONENTS(255.0, 255.0, 255.0, 0.00),
//          RGB_COMPONENTS(255.0, 255.0, 255.0, 0.15),
            RGB_COMPONENTS(255.0, 255.0, 255.0, 0.95),
//          RGB_COMPONENTS(255.0, 255.0, 255.0, 0.15),
            RGB_COMPONENTS(255.0, 255.0, 255.0, 0.00)
        };

        gradient = CGGradientCreateWithColorComponents(rgb, colors, NULL, sizeof(colors)/(sizeof(colors[0])*4));
        CGColorSpaceRelease(rgb);

        current_position_x = -(frame.size.width/2);// - MM_CONTENT_EDGE_INSETS.left - MM_CONTENT_EDGE_INSETS.right); 
    }

    return self;
}

- (CGRect)calculateFrame {
    CGSize size = [textToDisplay sizeWithFont:MM_FONT];
    NSLog(@"size: %f, %f", size.width, size.height);
    return CGRectMake(0, 0, size.width + MM_CONTENT_EDGE_INSETS.left + MM_CONTENT_EDGE_INSETS.right, size.height + MM_CONTENT_EDGE_INSETS.top + MM_CONTENT_EDGE_INSETS.bottom);
}

- (void)tick:(NSTimer*)theTimer {
    if (current_position_x < self.frame.size.width)
        current_position_x = current_position_x + MM_HORIZONTAL_SPAN;
    else
        current_position_x = -(self.frame.size.width/2); // - MM_CONTENT_EDGE_INSETS.left - MM_CONTENT_EDGE_INSETS.right);

    [self setNeedsDisplay]; 
}

- (void)startAnimation {    
    timer = [[NSTimer alloc] initWithFireDate:[NSDate date] 
                                     interval:MM_TIMER_INTERVAL
                                       target:self 
                                     selector:@selector(tick:)
                                     userInfo:nil
                                      repeats:YES];

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
}

- (void)toggle {

    if (!timer) {
        timer = [[NSTimer alloc] initWithFireDate:[NSDate date] 
                                         interval:MM_TIMER_INTERVAL
                                           target:self 
                                         selector:@selector(tick:)
                                         userInfo:nil
                                          repeats:YES];

        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
    } else {
        [timer invalidate];
        [timer release];
        timer = nil;

        current_position_x = -(self.frame.size.width/2);
        [self setNeedsDisplay]; 
    }
}

- (BOOL)isAnimating {

    if (timer) 
        return YES;
    else
        return NO;
}

- (void)drawRect:(CGRect)rect {
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    // Get drawing font.
    CGFontRef font = CGFontCreateWithFontName((CFStringRef)[[self font] fontName]);
    CGContextSetFont(ctx, font);
    CGContextSetFontSize(ctx, [[self font] pointSize]);

    // Calculate text drawing point only first time
    // 
    if (text_length == -1) {    

        // Transform text characters to unicode glyphs.
        text_length = [[self text] length];
        unichar chars[text_length];
        [[self text] getCharacters:chars range:NSMakeRange(0, text_length)];

        _glyphs = malloc(sizeof(CGGlyph) * text_length);
        for (int i=0; i<text_length;i ++)
            _glyphs[i] = chars[i] - 29;

        // Measure text dimensions.
        CGContextSetTextDrawingMode(ctx, kCGTextInvisible); 
        CGContextSetTextPosition(ctx, 0, 0);
        CGContextShowGlyphs(ctx, _glyphs, text_length);
        CGPoint textEnd = CGContextGetTextPosition(ctx);

        // Calculate text drawing point.        
        CGPoint anchor = CGPointMake(textEnd.x * (-0.5), [[self font] pointSize] * (-0.25));  
        CGPoint p = CGPointApplyAffineTransform(anchor, CGAffineTransformMake(1, 0, 0, -1, 0, 1));

        if ([self textAlignment] == UITextAlignmentCenter) 
            alignment.x = [self bounds].size.width * 0.5 + p.x;
        else if ([self textAlignment] == UITextAlignmentLeft) 
            alignment.x = 0;
        else 
            alignment.x = [self bounds].size.width - textEnd.x;

        alignment.y = [self bounds].size.height * 0.5 + p.y;
    }

    // Flip back mirrored text.
    CGContextSetTextMatrix(ctx, CGAffineTransformMakeScale(1, -1));

    // Draw shadow.
    CGContextSaveGState(ctx);
    CGContextSetTextDrawingMode(ctx, kCGTextFill);
    CGContextSetFillColorWithColor(ctx, [[self textColor] CGColor]);
    CGContextSetShadowWithColor(ctx, [self shadowOffset], 0, [[self shadowColor] CGColor]);
    CGContextShowGlyphsAtPoint(ctx, alignment.x, alignment.y, _glyphs, text_length);
    CGContextRestoreGState(ctx);

    // Draw text clipping path.
    CGContextSetTextDrawingMode(ctx, kCGTextClip);
    CGContextShowGlyphsAtPoint(ctx, alignment.x, alignment.y, _glyphs, text_length);

    // Restore text mirroring.
    CGContextSetTextMatrix(ctx, CGAffineTransformIdentity);

    if ([self isAnimating]) {
        // Fill text clipping path with gradient.
        CGPoint start = CGPointMake(rect.origin.x + current_position_x, rect.origin.y);
        CGPoint end = CGPointMake(rect.size.width/3*2 + current_position_x, rect.origin.y);

        CGContextDrawLinearGradient(ctx, gradient, start, end, 0);
    }
}


- (void) dealloc {
    free(_glyphs);
    [timer invalidate];
    [timer release];

    CGGradientRelease(gradient);
    [super dealloc];
}
Απαντήθηκε 14/04/2010 στις 15:15
πηγή χρήστη

ψήφοι
4

Ξέρω, είμαι λίγο αργά με την απάντηση, αλλά Facebook έχει μεγάλη βιβλιοθήκη Shimmer που εφαρμόζει ακριβώς αυτό το αποτέλεσμα.

Απαντήθηκε 18/01/2015 στις 19:01
πηγή χρήστη

ψήφοι
4

Χάρη στην rpetrich για τη συνταγή κλίση αποκοπής. Είμαι αρχάριος iPhone και το κακάο του έργου, γι 'αυτό ήταν πραγματική ευχάριστη θέση να το βρείτε.

Έχω εφάρμοσε μια αξιοπρεπή εμφάνιση διαφανειών για να ακυρώσετε UIViewController με τη μέθοδο rpetrich του. Μπορείτε να κατεβάσετε το έργο Xcode της εφαρμογής μου από εδώ .

εφαρμογή μου χρησιμοποιεί μια επαναλαμβανόμενη NSTimer. Ήμουν σε θέση να καταλάβω πώς χρησιμοποιούν πυρήνα (ή Gore) Animation να έχουν τα γραφικά του iPhone κινητήρα κινούνται συνεχώς την επισήμανση. Νομίζω ότι θα μπορούσε να γίνει σε OS X με τα στρώματα μάσκα CALayer, αλλά στρώματα μάσκα δεν υποστηρίζονται στο iPhone OS.

Όταν παίζω με την Apple για «Slide να ξεκλειδώσετε» ρυθμιστικό στην αρχική οθόνη του iPhone μου, κατά καιρούς δει το πάγωμα animation. Πιστεύω λοιπόν ότι η Apple μπορεί να χρησιμοποιεί ένα χρονόμετρο, καθώς και.

Αν κάποιος μπορεί να καταλάβω πώς να κάνει μια εφαρμογή που βασίζεται μη-χρονόμετρο χρησιμοποιώντας CA ή OpenGL, θα ήθελα πολύ να το δω.

Ευχαριστώ για τη βοήθεια!

Απαντήθηκε 16/09/2009 στις 18:18
πηγή χρήστη

ψήφοι
2

Πήρα το καλύτερο από την παραπάνω λύσεις και δημιούργησε μια τακτοποιημένη μέθοδο που κάνει όλα για σένα:

- (void)createSlideToUnlockViewWithText:(NSString *)text
{
    UILabel *label = [[UILabel alloc] init];
    label.text = text;
    [label sizeToFit];
    label.textColor = [UIColor whiteColor];

    //Create an image from the label
    UIGraphicsBeginImageContextWithOptions(label.bounds.size, NO, 0.0);
    [[label layer] renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *textImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    CGFloat textWidth = textImage.size.width;
    CGFloat textHeight = textImage.size.height;

    CALayer *textLayer = [CALayer layer];
    textLayer.contents = (id)[textImage CGImage];
    textLayer.frame = CGRectMake(self.view.frame.size.width / 2 - textWidth / 2, self.view.frame.size.height / 2 - textHeight / 2, textWidth, textHeight);

    UIImage *maskImage = [UIImage imageNamed:@"Mask.png"];
    CALayer *maskLayer = [CALayer layer];
    maskLayer.backgroundColor = [[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.15] CGColor];
    maskLayer.contents = (id)maskImage.CGImage;
    maskLayer.contentsGravity = kCAGravityCenter;
    maskLayer.frame = CGRectMake(-textWidth - maskImage.size.width, 0.0, (textWidth * 2) + maskImage.size.width, textHeight);

    CABasicAnimation *maskAnimation = [CABasicAnimation animationWithKeyPath:@"position.x"];
    maskAnimation.byValue = [NSNumber numberWithFloat:textWidth + maskImage.size.width];
    maskAnimation.repeatCount = HUGE_VALF;
    maskAnimation.duration = 2.0;
    maskAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
    [maskLayer addAnimation:maskAnimation forKey:@"slideAnimation"];

    textLayer.mask = maskLayer;
    self.slideToUnlockLayer = textLayer;
    [self.view.layer addSublayer:self.slideToUnlockLayer];
}
Απαντήθηκε 25/05/2016 στις 14:30
πηγή χρήστη

ψήφοι
1

Έχω ανεβάσει στο GitHub ένα μικρό έργο που βοηθά με τη «διαφάνεια για να ξεκλειδώσει» κινούμενα σχέδια.

https://github.com/GabrielMassana/GM_FSHighlightAnimationAdditions

Το έργο έχει LTR, RTL, πάνω προς τα κάτω και προς τα κάτω για να Up κινούμενα σχέδια και βασίζεται στις θέσεις:

Pascal Bourque: https://stackoverflow.com/a/2778232/1381708

cberkley: https://stackoverflow.com/a/5710097/1381708

Στην υγειά σας

Απαντήθηκε 18/11/2013 στις 13:32
πηγή χρήστη

ψήφοι
1

Κατ 'αρχάς, ένα τεράστιο ευχαριστώ σε Marcio για λύση του. Αυτό λειτούργησε σχεδόν άψογα, με έσωσε ώρες της προσπάθειας, και έκανε μια τεράστια βουτιά στην εφαρμογή μου. Το αφεντικό μου άρεσε πάρα πολύ. Σου χρωστάω μπύρα. Ή περισσότερα.

Μια μικρή διόρθωση για το iPhone 4 μόνο. Θέλω να πω το ίδιο το υλικό, όχι μόνο το iOS 4. Θα αλλάξει τη γραμματοσειρά συστήματος για το iPhone 4 από Helvetica (iPhone 3Gs και κάτω) για να Helvetic Neue. Αυτό προκάλεσε η μετάφραση που κάνετε από το χαρακτήρα για να ιερογλυφικών να είναι μακριά από ακριβώς 4 σημεία. Για παράδειγμα, η συμβολοσειρά «FG» θα εμφανιστεί ως «π.Χ.». Έχω αυτή καθορίζεται από τη ρύθμιση ρητά τη γραμματοσειρά για να «Helvetica» αντί να χρησιμοποιούν «systemFontofSize». Τώρα λειτουργεί σαν μια γοητεία.

Και πάλι ... ΣΑΣ ΕΥΧΑΡΙΣΤΟΥΜΕ!

Απαντήθηκε 29/10/2010 στις 00:42
πηγή χρήστη

ψήφοι
0
  • Top: UILabel με αδιαφανές φόντο και σαφές κείμενο
    • Διαγράφεται το κείμενο αποδίδεται στην drawRect: λει μέσω περίπλοκη διαδικασία συγκάλυψης
  • Μέση: Εργαζόμενος Δείτε που εκτελεί μια επανάληψη animation κινείται μια εικόνα πίσω από την κορυφή ετικέτα
  • Κάτω: μια UIView που θέλετε να προσθέσετε τη μέση και πάνω δευτερεύουσας προβολής με αυτή τη σειρά. Μπορεί να είναι ό, τι χρώμα θέλετε το κείμενο να είναι

Ένα παράδειγμα μπορεί να δει εδώ https://github.com/jhurray/AnimatedLabelExample

Απαντήθηκε 23/04/2014 στις 15:21
πηγή χρήστη

ψήφοι
0

Ίσως είναι απλώς ένα καθίσταται-out animation - ξέρετε, μια σειρά από φωτογραφίες έπαιξε ένα μετά το άλλο. Όχι απαραίτητα ένα δυναμικό αποτέλεσμα.

Ενημέρωση: Δεν πειράζει, η DrJokepu βίντεο δημοσιεύτηκε αποδειχθεί ότι είναι δυναμικά.

Απαντήθηκε 13/01/2009 στις 08:34
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more