#import "WKInterface+TGInterface.h" #import @implementation WKInterfaceObject (TGInterface) @dynamic alpha, hidden; + (void)load { TGSwizzleMethodImplementation(self.class, @selector(setAlpha:), @selector(tg_setAlpha:)); TGSwizzleMethodImplementation(self.class, @selector(setHidden:), @selector(tg_setHidden:)); } - (CGFloat)alpha { return [objc_getAssociatedObject(self, @selector(alpha)) floatValue]; } - (void)tg_setAlpha:(CGFloat)alpha { objc_setAssociatedObject(self, @selector(alpha), @(alpha), OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setAlpha:alpha]; } - (bool)isHidden { return [objc_getAssociatedObject(self, @selector(isHidden)) boolValue]; } - (void)tg_setHidden:(BOOL)hidden { objc_setAssociatedObject(self, @selector(isHidden), @(hidden), OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setHidden:hidden]; } - (void)_setInitialHidden:(bool)hidden { objc_setAssociatedObject(self, @selector(isHidden), @(hidden), OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (CGFloat)width { return [objc_getAssociatedObject(self, @selector(width)) floatValue]; } - (void)tg_setWidth:(CGFloat)width { objc_setAssociatedObject(self, @selector(width), @(width), OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setWidth:width]; } - (CGFloat)height { return [objc_getAssociatedObject(self, @selector(height)) floatValue]; } - (void)tg_setHeight:(CGFloat)height { objc_setAssociatedObject(self, @selector(height), @(height), OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setHeight:height]; } @end @implementation WKInterfaceGroup (TGInterface) + (void)load { TGSwizzleMethodImplementation(self.class, @selector(setBackgroundColor:), @selector(tg_setBackgroundColor:)); } - (UIColor *)backgroundColor { return objc_getAssociatedObject(self, @selector(backgroundColor)); } - (void)tg_setBackgroundColor:(UIColor *)backgroundColor { objc_setAssociatedObject(self, @selector(backgroundColor), backgroundColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setBackgroundColor:backgroundColor]; } @end @implementation WKInterfaceLabel (TGInterface) @dynamic text, textColor, attributedText; + (void)load { TGSwizzleMethodImplementation(self.class, @selector(setText:), @selector(tg_setText:)); TGSwizzleMethodImplementation(self.class, @selector(setTextColor:), @selector(tg_setTextColor:)); TGSwizzleMethodImplementation(self.class, @selector(setAttributedText:), @selector(tg_setAttributedText:)); } - (NSString *)text { return objc_getAssociatedObject(self, @selector(text)); } - (void)tg_setText:(NSString *)text { objc_setAssociatedObject(self, @selector(text), text, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setText:text]; } - (UIColor *)textColor { return objc_getAssociatedObject(self, @selector(textColor)); } - (void)tg_setTextColor:(UIColor *)textColor { objc_setAssociatedObject(self, @selector(textColor), textColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setTextColor:textColor]; } - (NSAttributedString *)attributedText { return objc_getAssociatedObject(self, @selector(attributedText)); } - (void)tg_setAttributedText:(NSAttributedString *)attributedText { objc_setAssociatedObject(self, @selector(attributedText), attributedText, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setAttributedText:attributedText]; } - (NSString *)hyphenatedText { return self.attributedText.string; } - (void)setHyphenatedText:(NSString *)hyphenatedText { NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.hyphenationFactor = 1.0f; self.attributedText = [[NSAttributedString alloc] initWithString:hyphenatedText attributes:@{ NSParagraphStyleAttributeName:paragraphStyle }]; } @end @implementation WKInterfaceButton (TGInterface) + (void)load { TGSwizzleMethodImplementation(self.class, @selector(setTitle:), @selector(tg_setTitle:)); TGSwizzleMethodImplementation(self.class, @selector(setAttributedTitle:), @selector(tg_setAttributedTitle:)); TGSwizzleMethodImplementation(self.class, @selector(setTextColor:), @selector(tg_setTextColor:)); } - (NSString *)title { return objc_getAssociatedObject(self, @selector(title)); } - (void)tg_setTitle:(NSString *)title { objc_setAssociatedObject(self, @selector(title), title, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setTitle:title]; } - (NSAttributedString *)attributedTitle { return objc_getAssociatedObject(self, @selector(attributedTitle)); } - (void)tg_setAttributedTitle:(NSAttributedString *)attributedTitle { objc_setAssociatedObject(self, @selector(attributedTitle), attributedTitle, OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setAttributedTitle:attributedTitle]; } - (bool)isEnabled { return [objc_getAssociatedObject(self, @selector(isEnabled)) boolValue]; } - (void)tg_setEnabled:(BOOL)enabled { objc_setAssociatedObject(self, @selector(isEnabled), @(enabled), OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setEnabled:enabled]; } @end @implementation WKInterfaceMap (TGInterface) + (void)load { TGSwizzleMethodImplementation(self.class, @selector(setRegion:), @selector(tg_setRegion:)); } - (MKCoordinateRegion)region { MKCoordinateRegion region; NSArray *values = objc_getAssociatedObject(self, @selector(region)); if (values != nil) region = MKCoordinateRegionMake([values.firstObject MKCoordinateValue], [values.lastObject MKCoordinateSpanValue]); return region; } - (void)tg_setRegion:(MKCoordinateRegion)region { MKCoordinateRegion currentRegion = self.region; if (fabs(currentRegion.center.latitude - region.center.latitude) < DBL_EPSILON && fabs(currentRegion.center.longitude - region.center.longitude) < DBL_EPSILON && fabs(currentRegion.span.latitudeDelta - region.span.latitudeDelta) < DBL_EPSILON && fabs(currentRegion.span.longitudeDelta - region.span.longitudeDelta) < DBL_EPSILON) { return; } objc_setAssociatedObject(self, @selector(region), @[ [NSValue valueWithMKCoordinate:region.center], [NSValue valueWithMKCoordinateSpan:region.span] ], OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self tg_setRegion:region]; } - (CLLocationCoordinate2D)centerPinCoordinate { return [objc_getAssociatedObject(self, @selector(centerPinCoordinate)) MKCoordinateValue]; } - (void)setCenterPinCoordinate:(CLLocationCoordinate2D)centerPinCoordinate { CLLocationCoordinate2D currentCoordinate = self.centerPinCoordinate; if (fabs(currentCoordinate.latitude - centerPinCoordinate.latitude) < DBL_EPSILON && fabs(currentCoordinate.longitude - centerPinCoordinate.longitude) < DBL_EPSILON) { return; } [self removeAllAnnotations]; if (fabs(centerPinCoordinate.latitude) > 0 || fabs(centerPinCoordinate.longitude) > 0) [self addAnnotation:centerPinCoordinate withPinColor:WKInterfaceMapPinColorRed]; } @end