1
A
回答
-1
你可以找到所有的細節和一些原始的OBJ-C代碼here (gist)。代碼不完整,但足以啓動。
這裏只繪製背景圖片代碼:
- (UIImage*)hintImage {
CGMutablePathRef path = CGPathCreateMutable();
CGPoint p = CGPointMake(__PADDING_X, __PADDING_Y);
CGPoint p1 = CGPointZero;
CGPoint p2 = CGPointZero;
//1
p.x += __PAN_UPPER_RADIUS;
CGPathMoveToPoint(path, NULL, p.x, p.y);
NSUInteger hintCount = [self.hintSymbolsList count];
//!!!:magic numbers
self.hintAdditionalWidth = 2*(hintCount-1)*(self.frame.size.width+__GAP_X);
//2
p.x += __PAN_UPPDER_WIDTH + self.hintAdditionalWidth;
//!!!:+hintCount*(__PAN_LOWER_WIDTH+__GAP_X);
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//3
p.y += __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
3.0*M_PI/2.0,
4.0*M_PI/2.0,
false);
p.x += __PAN_UPPER_RADIUS;
//4
p.y += __PAN_UPPER_HEIGHT - __PAN_UPPER_RADIUS;
if (self.hintPosition == ACHintPositionFarRight ||
self.hintPosition == ACHintPositionRight) {
p.y += - 2*__PAN_UPPER_RADIUS + __PAN_CURVE_SIZE + __PAN_MIDDLE_HEIGHT;
} else { //ACHintPositionLeft & ACHintPositionFarLeft
p.y -= __PAN_CURVE_SIZE;
}
CGPathAddLineToPoint(path, NULL, p.x, p.y);
if (self.hintPosition == ACHintPositionFarRight ||
self.hintPosition == ACHintPositionRight) {
//5.1
p.x -= __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
4.0*M_PI/2.0,
1.0*M_PI/2.0,
false);
p.y += __PAN_UPPER_RADIUS;
//5.2
p.x -= self.hintAdditionalWidth + __PAN_UL_WIDTH-2*__PAN_UPPER_RADIUS;
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//5.3
p.y += __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
3.0*M_PI/2.0,
2.0*M_PI/2.0,
true);
p.x -= __PAN_UPPER_RADIUS;
} else { //ACHintPositionLeft & ACHintPositionFarLeft
//5
p1 = CGPointMake(p.x, p.y + __PAN_CURVE_SIZE);
p.x -= __PAN_UL_WIDTH;
p.y += __PAN_MIDDLE_HEIGHT + __PAN_CURVE_SIZE*2;
p2 = CGPointMake(p.x, p.y - __PAN_CURVE_SIZE);
CGPathAddCurveToPoint(path, NULL,
p1.x, p1.y,
p2.x, p2.y,
p.x, p.y);
}
//6
p.y += __PAN_LOWER_HEIGHT - __PAN_CURVE_SIZE - __PAN_LOWER_RADIUS;
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//7
p.x -= __PAN_LOWER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_LOWER_RADIUS,
4.0*M_PI/2.0,
1.0*M_PI/2.0,
false);
//8
p.x -= __PAN_LOWER_WIDTH;
p.y += __PAN_LOWER_RADIUS;
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//9
p.y -= __PAN_LOWER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_LOWER_RADIUS,
1.0*M_PI/2.0,
2.0*M_PI/2.0,
false);
//10
p.x -= __PAN_LOWER_RADIUS;
p.y -= __PAN_LOWER_HEIGHT - __PAN_LOWER_RADIUS - __PAN_CURVE_SIZE;
CGPathAddLineToPoint(path, NULL, p.x, p.y);
if (self.hintPosition == ACHintPositionFarRight ||
self.hintPosition == ACHintPositionRight) {
//11
p1 = CGPointMake(p.x, p.y - __PAN_CURVE_SIZE);
p.x -= __PAN_UL_WIDTH;
p.y -= __PAN_MIDDLE_HEIGHT + __PAN_CURVE_SIZE*2;
p2 = CGPointMake(p.x, p.y + __PAN_CURVE_SIZE);
CGPathAddCurveToPoint(path, NULL,
p1.x, p1.y,
p2.x, p2.y,
p.x, p.y);
} else { //ACHintPositionLeft & ACHintPositionFarLeft
//11.1
p.x -= __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
4.0*M_PI/2.0,
3.0*M_PI/2.0,
true);
p.y -= __PAN_UPPER_RADIUS;
//11.2
p.x -= self.hintAdditionalWidth + __PAN_UL_WIDTH-2*__PAN_UPPER_RADIUS;
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//11.3
p.y -= __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
1.0*M_PI/2.0,
2.0*M_PI/2.0,
false);
p.x -= __PAN_UPPER_RADIUS;
}
//12
p.y -= __PAN_UPPER_HEIGHT - __PAN_UPPER_RADIUS;
if (self.hintPosition == ACHintPositionFarRight ||
self.hintPosition == ACHintPositionRight) {
p.y += __PAN_CURVE_SIZE;
} else {
p.y -= - 2*__PAN_UPPER_RADIUS + __PAN_CURVE_SIZE + __PAN_MIDDLE_HEIGHT;
}
CGPathAddLineToPoint(path, NULL, p.x, p.y);
//13
p.x += __PAN_UPPER_RADIUS;
CGPathAddArc(path, NULL,
p.x, p.y,
__PAN_UPPER_RADIUS,
2.0*M_PI/2.0,
3.0*M_PI/2.0,
false);
//----
CGContextRef context;
UIGraphicsBeginImageContext(CGSizeMake(__WIDTH+self.hintAdditionalWidth,
__HEIGHT));
context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, __HEIGHT);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextAddPath(context, path);
CGContextClip(context);
//----
CGRect frame = CGPathGetBoundingBox(path);
CGColorRef backColor = [UIColor whiteColor];
CGContextSetFillColorWithColor(context, backColor);
CGContextFillRect(context, frame);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage * image = [UIImage imageWithCGImage:imageRef scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationDown];
CGImageRelease(imageRef);
UIGraphicsEndImageContext();
CFRelease(path);
return image;
}
相關問題
- 1. 自定義表情符號鍵盤IOS
- 2. 我的自定義鍵盤中的Apple表情符號鍵盤
- 3. 在自定義鍵盤中添加表情符號
- 4. 添加自定義按鈕到數字鍵盤的鍵盤ios 6
- 5. 在自定義鍵盤中添加下一個按鈕
- 6. iOS鍵盤和自定義按鈕
- 7. 自定義鍵盤退格按鈕
- 8. 添加一個按鈕隱藏鍵盤
- 9. 如何將自定義按鈕添加到鍵盤?
- 10. 自定義按鈕添加到數字鍵盤的問題
- 11. 如何將自定義按鈕添加到我的鍵盤?
- 12. 按按鈕自定義鍵盤時播放聲音點擊按鈕定製鍵盤XAMARIN
- 13. 如何在默認Android鍵盤中添加按鍵/自定義按鍵
- 14. 表情符號鍵盤
- 15. 如何製作按鈕按鈕類型(自定義鍵盤)
- 16. 軟鍵盤按鈕
- 17. onClickListener鍵盤按鈕
- 18. 將按鈕添加到軟鍵盤
- 19. 在不按鍵盤按鍵的情況下觸發鍵盤按鍵事件
- 20. 多鍵盤按下
- 21. 創建類似表情符號的自定義鍵盤
- 22. 創建自定義表情符號iOS鍵盤
- 23. 如何在ios中創建自定義表情符號鍵盤?
- 24. 如何使用表情符號創建自定義鍵盤
- 25. Android中的表情符號自定義鍵盤
- 26. 自定義數字鍵盤與$符號
- 27. 自定義鍵盤符號代碼android
- 28. Android手柄「搜索」按鈕按下自定義鍵盤
- 29. 添加IPad鍵盤的按鍵
- 30. 當選擇UITextField時,在iphone鍵盤上添加自定義圖像按鈕
您需要繪製使用'UIBezierPath'佈局和做addSubView爲好。 – iphonic
@iphonic。感謝您的指導。任何參考鏈接或示例代碼? – kb920
對不起,我沒有任何示例代碼,因爲我從來沒有嘗試過。但是這是你必須做的,[看看這個](https://github.com/mindbrix/TurtleBezierPath),你可以如何繪製佈局,它看起來很簡單,需要編程和計算。祝你好運。 – iphonic