Quelqu'un at-il des idées sur la façon de reproduire le gloss des icônes de l'application iPhone en utilisant WebKit et CSS3 et/ou une image de superposition transparente? Est-ce seulement possible?Reproduire l'éclat de l'icône de Springboard avec WebKit
Répondre
iPhone OS utilise les images suivantes pour composer l'icône:
- AppIconMask.png
- AppIconShadow.png
- AppIconOverlay.png (en option)
Voilà comment je l'ai mis en œuvre ci-dessus en utilisant uniquement la AppIconOverlay.png
dans mon application. J'aime un peu l'effet désiré.
Il n'a pas l'ombre, mais je suis sûr que si vous le vouliez vraiment, vous pourriez modifier le code afin de répondre à vos besoins. En termes de AppIconMask.png
je ne pouvais pas vraiment besoin de l'utiliser puisque j'utilise le #import <QuartzCore/QuartzCore.h>
cadre afin d'obtenir l'effet désiré en ajoutant un layer.masksToBounds
et layer.cornerRadius
.
J'espère que cela fonctionne pour tous ceux qui sont intéressés par l'effet de superposition Apple Springboard. Oh et merci à rpetrich pour fournir ces images. Je m'excuse pour le manque de commentaires dans le code. C'est le point culminant du code provenant d'implémentations existantes similaires dispersées sur Internet. Je tiens donc à remercier toutes ces personnes d'avoir fourni ces morceaux de code qui sont également utilisés.
- (UIImage *)getIconOfSize:(CGSize)size icon:(UIImage *)iconImage withOverlay:(UIImage *)overlayImage {
UIImage *icon = [self scaleImage:iconImage toResolution:size.width];
CGRect iconBoundingBox = CGRectMake (0, 0, size.width, size.height);
CGRect overlayBoundingBox = CGRectMake (0, 0, size.width, size.height);
CGContextRef myBitmapContext = [self createBitmapContextOfSize:size];
CGContextSetRGBFillColor (myBitmapContext, 1, 1, 1, 1);
CGContextFillRect (myBitmapContext, iconBoundingBox);
CGContextDrawImage(myBitmapContext, iconBoundingBox, icon.CGImage);
CGContextDrawImage(myBitmapContext, overlayBoundingBox, overlayImage.CGImage);
UIImage *result = [UIImage imageWithCGImage: CGBitmapContextCreateImage (myBitmapContext)];
CGContextRelease (myBitmapContext);
return result;
}
- (CGContextRef)createBitmapContextOfSize:(CGSize)size {
CGContextRef context = NULL;
CGColorSpaceRef colorSpace;
void * bitmapData;
int bitmapByteCount;
int bitmapBytesPerRow;
bitmapBytesPerRow = (size.width * 4);
bitmapByteCount = (bitmapBytesPerRow * size.height);
colorSpace = CGColorSpaceCreateDeviceRGB();
bitmapData = malloc(bitmapByteCount);
if (bitmapData == NULL) {
fprintf (stderr, "Memory not allocated!");
return NULL;
}
context = CGBitmapContextCreate (bitmapData,
size.width,
size.height,
8, // bits per component
bitmapBytesPerRow,
colorSpace,
kCGImageAlphaPremultipliedLast);
CGContextSetAllowsAntialiasing (context,NO);
if (context== NULL) {
free (bitmapData);
fprintf (stderr, "Context not created!");
return NULL;
}
CGColorSpaceRelease(colorSpace);
return context;
}
- (UIImage *)scaleImage:(UIImage *)image toResolution:(int)resolution {
CGFloat width = image.size.width;
CGFloat height = image.size.height;
CGRect bounds = CGRectMake(0, 0, width, height);
// If already at the minimum resolution, return the original image, otherwise scale.
if (width <= resolution && height <= resolution) {
return image;
} else {
CGFloat ratio = width/height;
if (ratio > 1) {
bounds.size.width = resolution;
bounds.size.height = bounds.size.width/ratio;
} else {
bounds.size.height = resolution;
bounds.size.width = bounds.size.height * ratio;
}
}
UIGraphicsBeginImageContext(bounds.size);
[image drawInRect:CGRectMake(0.0, 0.0, bounds.size.width, bounds.size.height)];
UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return imageCopy;
}
Utilisation:
UIImage *overlayImage = [UIImage imageNamed:@"AppIconOverlay.png"];
UIImage *profileImage = [Helper getIconOfSize:CGSizeMake(59, 60) icon:image withOverlay:overlayImage];
[profilePictureImageView setImage:profileImage];
profilePictureImageView.layer.masksToBounds = YES;
profilePictureImageView.layer.cornerRadius = 10.0;
profilePictureImageView.layer.borderColor = [[UIColor grayColor] CGColor];
profilePictureImageView.layer.borderWidth = 1.0;
- 1. springboard prend trop de CPU
- 2. comment reproduire les animations JQtouch smooth iphone?
- 3. Problèmes de tableau avec WebKit
- 4. Est-il possible de reproduire randn() de MATLAB avec NumPy?
- 5. Comment reproduire l'expérience de l'utilisateur?
- 6. Reproduire l'entrée de clé de produit Windows
- 7. Comment utiliser le framework appelé Springboard
- 8. Freemaker: Reproduire XML
- 9. Reproduire row_factory de pysqlite sur apsw
- 10. problème simple de nommage encore se reproduire
- 11. iPhone - personnalisation de WebKit
- 12. Outils de débogage de Webkit
- 13. CSS + <img> Implémentation de webkit avec utilisation de%
- 14. Outil de modification d'image Webkit
- 15. Exemples de paramètres -webkit-appearance
- 16. Galerie jQuery - Problèmes de Webkit
- 17. enregistrer les balises html et et de reproduire correctement
- 18. Comment "extraire" une version particulière de webkit avec svn?
- 19. Mauvais rendu des cellules de tableau avec Google Chrome/Webkit
- 20. Application de développement Web avec WebKit intégré Page-Preview
- 21. Problème avec la couleur de surlignage tap Webkit non appliquée
- 22. Utilisation de document XSLT() avec les navigateurs WebKit
- 23. Définir le webkit-keyframes de/à paramètre avec JavaScript
- 24. Protocole d'ingénierie inverse/Reproduire le dialogue HTTP
- 25. Html en PDF avec la transformation Webkit
- 26. -webkit-border-image avec les sprites css
- 27. -webkit-box-shadow flou avec QtWebKit?
- 28. Utilisation du chemin local avec WebView (Webkit)
- 29. Sélecteur HTML natif avec Android/iPhone Webkit?
- 30. ralentir gdb pour reproduire le bogue
Oh, il est possible. Voir mon code ci-dessous en utilisant l'image de superposition transparente fournie par rpetrich. – fuzz