Finish TextPath and TSpan in Android

This commit is contained in:
Horcrux
2017-01-12 20:36:20 +08:00
parent e3026c0bb5
commit e0c3e15294
16 changed files with 918 additions and 380 deletions
+2 -3
View File
@@ -11,10 +11,9 @@
@interface RNSVGBezierTransformer : NSObject
+ (BOOL) hasReachedEnd:(CGAffineTransform)transform;
+ (BOOL) hasReachedStart:(CGAffineTransform) transform;
- (instancetype)initWithBezierCurvesAndStartOffset:(NSArray<NSArray *> *)bezierCurves startOffset:(CGFloat)startOffset;
- (CGAffineTransform)getTransformAtDistance:(CGFloat)distance;
- (BOOL)hasReachedEnd;
- (BOOL)hasReachedStart;
@end
+15 -23
View File
@@ -26,6 +26,7 @@
CGPoint _P2;
CGPoint _P3;
BOOL _reachedEnd;
BOOL _reachedStart;
}
- (instancetype)initWithBezierCurvesAndStartOffset:(NSArray<NSArray *> *)bezierCurves startOffset:(CGFloat)startOffset
@@ -39,24 +40,6 @@
return self;
}
static CGAffineTransform getReachedEndTansform() {
return CGAffineTransformMakeScale(0, 1);
}
static CGAffineTransform getUnreadedTransform() {
return CGAffineTransformMakeScale(1, 0);
}
+ (BOOL) hasReachedEnd:(CGAffineTransform)transform
{
return transform.a == 0;
}
+ (BOOL) hasReachedStart:(CGAffineTransform) transform
{
return transform.d == 0;
}
static CGFloat calculateBezier(CGFloat t, CGFloat P0, CGFloat P1, CGFloat P2, CGFloat P3) {
return (1-t)*(1-t)*(1-t)*P0+3*(1-t)*(1-t)*t*P1+3*(1-t)*t*t*P2+t*t*t*P3;
}
@@ -124,10 +107,9 @@ static CGFloat calculateDistance(CGPoint a, CGPoint b) {
- (CGAffineTransform)getTransformAtDistance:(CGFloat)distance
{
distance += _startOffset;
if (_reachedEnd) {
return getReachedEndTansform();
} else if (distance < 0) {
return getUnreadedTransform();
_reachedStart = distance >= 0;
if (_reachedEnd || !_reachedStart) {
return CGAffineTransformIdentity;
}
CGFloat offset = [self offsetAtDistance:distance - _lastRecord
@@ -142,7 +124,7 @@ static CGFloat calculateDistance(CGPoint a, CGPoint b) {
return CGAffineTransformRotate(CGAffineTransformMakeTranslation(glyphPoint.x, glyphPoint.y), [self angleAtOffset:offset]);
} else if (_bezierCurves.count == _currentBezierIndex) {
_reachedEnd = YES;
return getReachedEndTansform();
return CGAffineTransformIdentity;
} else {
_lastOffset = 0;
_lastPoint = _P0 = _P3;
@@ -152,4 +134,14 @@ static CGFloat calculateDistance(CGPoint a, CGPoint b) {
}
}
- (BOOL)hasReachedEnd
{
return _reachedEnd;
}
- (BOOL)hasReachedStart
{
return _reachedStart;
}
@end