Navigation Menu

Skip to content

Commit

Permalink
Arrow image goes on its own layer and it should be layer backed.
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Zielenski committed Apr 6, 2012
1 parent 87d1f3f commit e33c974
Showing 1 changed file with 25 additions and 17 deletions.
42 changes: 25 additions & 17 deletions ScrollToRefresh/src/EQSTRScrollView.m
Expand Up @@ -32,7 +32,7 @@

@interface EQSTRScrollView ()
@property (nonatomic, assign) BOOL _overRefreshView;

@property (nonatomic, retain) CALayer *_arrowLayer;
- (BOOL)overRefreshView;
- (void)createHeaderView;
- (void)viewBoundsChanged:(NSNotification*)note;
Expand All @@ -46,6 +46,7 @@ @implementation EQSTRScrollView
#pragma mark - Private Properties

@synthesize _overRefreshView;
@synthesize _arrowLayer;

#pragma mark - Public Properties

Expand All @@ -58,6 +59,7 @@ @implementation EQSTRScrollView
#pragma mark - Dealloc
- (void)dealloc {
self.refreshBlock = nil;
self._arrowLayer = nil;
[super dealloc];
}

Expand Down Expand Up @@ -102,7 +104,7 @@ - (void)createHeaderView {

[self.contentView setPostsFrameChangedNotifications:YES];
[self.contentView setPostsBoundsChangedNotifications:YES];

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(viewBoundsChanged:)
name:NSViewBoundsDidChangeNotification
Expand All @@ -117,16 +119,22 @@ - (void)createHeaderView {

// Create Arrow
NSImage *arrowImage = [NSImage imageNamed:@"arrow"];
_refreshArrow = [[NSView alloc] initWithFrame:NSMakeRect(floor(NSMidX(self.refreshHeader.bounds) - arrowImage.size.width / 2),
floor(NSMidY(self.refreshHeader.bounds) - arrowImage.size.height / 2),
arrowImage.size.width,
arrowImage.size.height)];
self.refreshArrow.wantsLayer = YES;
self.refreshArrow.layer = [CALayer layer];
self.refreshArrow.layer.contents = (id)[arrowImage CGImageForProposedRect:NULL
context:nil
hints:nil];

_refreshArrow = [[NSView alloc] initWithFrame:NSMakeRect(floor(NSMidX(self.refreshHeader.bounds) - arrowImage.size.width / 2),
floor(NSMidY(self.refreshHeader.bounds) - arrowImage.size.height / 2),
arrowImage.size.width,
arrowImage.size.height)];
self.refreshArrow.wantsLayer = YES;

self._arrowLayer = [CALayer layer];
self._arrowLayer.contents = (id)[arrowImage CGImageForProposedRect:NULL
context:nil
hints:nil];

self._arrowLayer.frame = NSRectToCGRect(_refreshArrow.bounds);
_refreshArrow.layer.frame = NSRectToCGRect(_refreshArrow.bounds);

[self.refreshArrow.layer addSublayer:self._arrowLayer];

// Create spinner
_refreshSpinner = [[NSProgressIndicator alloc] initWithFrame:NSMakeRect(floor(NSMidX(self.refreshHeader.bounds) - 30),
floor(NSMidY(self.refreshHeader.bounds) - 20),
Expand All @@ -141,9 +149,9 @@ - (void)createHeaderView {

// Center the spinner in the header
[self.refreshSpinner setFrame:NSMakeRect(floor(NSMidX(self.refreshHeader.bounds) - self.refreshSpinner.frame.size.width / 2),
floor(NSMidY(self.refreshHeader.bounds) - self.refreshSpinner.frame.size.height / 2),
self.refreshSpinner.frame.size.width,
self.refreshSpinner.frame.size.height)];
floor(NSMidY(self.refreshHeader.bounds) - self.refreshSpinner.frame.size.height / 2),
self.refreshSpinner.frame.size.width,
self.refreshSpinner.frame.size.height)];

// set autoresizing masks
self.refreshSpinner.autoresizingMask = NSViewMinXMargin | NSViewMaxXMargin | NSViewMinYMargin | NSViewMaxYMargin; // center
Expand Down Expand Up @@ -184,13 +192,13 @@ - (void)viewBoundsChanged:(NSNotification *)note {
if (start) {

// point arrow up
[self.refreshArrow layer].transform = CATransform3DMakeRotation(M_PI, 0, 0, 1);
self._arrowLayer.transform = CATransform3DMakeRotation(M_PI, 0, 0, 1);
self._overRefreshView = YES;

} else {

// point arrow down
[self.refreshArrow layer].transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1);
self._arrowLayer.transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1);
self._overRefreshView = NO;

}
Expand Down

0 comments on commit e33c974

Please sign in to comment.