Skip to content

Instantly share code, notes, and snippets.

Avatar
🍁

Karol S. Mazur ksm

🍁
View GitHub Profile
@ksm
ksm / gist:1830844
Created Feb 14, 2012
CoreGraphics UITableView iOS5 bevel effect function
View gist:1830844
/*
Copied and pasted from Tim Oliver's blog.
Source: http://www.tim-oliver.com/2011/10/23/creating-the-uitableview-bevel-effect-in-coregraphics/
*/
void DrawInsetBeveledRoundedRect(CGContextRef context, CGRect rect, CGFloat radius, UIColor *fillColor) {
//contract the bounds of the rectangle in to account for the stroke
CGRect drawRect = CGRectInset(rect, 1.0f, 1.0f);
//contract the height by 1 to account for the white bevel at the bottom
@ksm
ksm / DrawView.h
Created Feb 14, 2012
DrawView with a block for drawRect: an alternative to subclassing UIView for simple drawing operations
View DrawView.h
/*
Copied and pasted from David Hamrick's blog.
Source: http://www.davidhamrick.com/2011/08/07/using-blocks-for-drawing-to-avoid-subclasssing-in-objective-c.html
*/
typedef void(^DrawView_DrawBlock)(UIView* v,CGContextRef context);
@interface DrawView : UIView
@ksm
ksm / UINavigationController+Fade.h
Created Feb 14, 2012
UINavigationController custom pop/push transition animation
View UINavigationController+Fade.h
/*
Copied and pasted from David Hamrick's blog:
Source: http://www.davidhamrick.com/2011/12/31/Changing-the-UINavigationController-animation-style.html
*/
@interface UINavigationController (Fade)
- (void)pushFadeViewController:(UIViewController *)viewController;
- (void)fadePopViewController;
@ksm
ksm / debug.h
Created Feb 20, 2012
Xcode: how to debug the right way
View debug.h
// via @_bejo
// then just add a DEBUG = 1 to debug target in xcode
#ifdef DEBUG
#define DebugLog( s, ... ) NSLog( @"<%@:(%d)> %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
#define DebugLog( s, ... )
@ksm
ksm / gist:1869823
Created Feb 20, 2012
CALayer draw resized image (kill all misaligned images)
View gist:1869823
/*
Source: Apple Developer - Understanding iOS View Compositing
*/
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
UIImage *image = [self loadImage];
if (image != nil) {
CGSize s = image.size;
CGRect r = layer.bounds;
@ksm
ksm / gist:1869980
Created Feb 20, 2012
CALayer masking in drawLayer:inContext (to avoid layer.cornerRadius performance hit)
View gist:1869980
/*
Source: Apple Developer - Understanding iOS View Compositing
Note: setting view.layer.cornerRadius and .masksToBounds
sends the view for rending to an offscreen buffer.
We want to avoid unnecessary rendering passes.
Let the context do the work.
*/
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
CGRect rect = layer.bounds;
@ksm
ksm / gist:1875946
Created Feb 21, 2012
CALayer shadowPath done the right way
View gist:1875946
/*
Source: Apple Developer - Understanding iOS View Compositing
*/
// setup the layer
CALayer *layer = view.layer;
layer.bounds = sublayer_bounds;
layer.backgroundColor = random_color();
// set the shadow properties on the layer
@ksm
ksm / gist:2152929
Created Mar 21, 2012
KVO granular notifications on NSMutableArray
View gist:2152929
/*
Thanks to @_bejo
*/
- (void)_insertGlobalRoomMessage:(id)msg atIndex:(NSUInteger)index
{
NSIndexSet *changeSet = [NSIndexSet indexSetWithIndex:index];
[self willChange:NSKeyValueChangeInsertion valuesAtIndexes:changeSet forKey:@"globalRoomMessages"];
[(NSMutableArray *)self.globalRoomMessages insertObject:msg atIndex:index];
[self didChange:NSKeyValueChangeInsertion valuesAtIndexes:changeSet forKey:@"globalRoomMessages"];
@ksm
ksm / .gitignore
Created May 16, 2012 — forked from kluivers/.gitignore
.gitignore for Xcode projects
View .gitignore
# .gitignore in use by Joris Kluivers
#
# Latest version:
# https://gist.github.com/gists/1923197
*.DS_Store
# Xcode
*.pbxuser
*.mode1v3
@ksm
ksm / gist:3029763
Created Jul 1, 2012
Batching up database changes into a single save
View gist:3029763
// Source: Stanford CS193P November 16, 2010 Lecture 16
// Use case: lots of Core Data changes. You want them to save once they settle down.
- (void)delayedSave:(NSManagedObjectContext *)ctxt
{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doSave:) object:ctxt];
[self performSelector:@selector(doSave:) withObject:ctxt afterDelay:1.0];
}