2015-04-20 42 views
0

我想將此圖像的邊界從矩形轉換爲六角形。 我知道如何實現按鈕的自定義邊界。但如何實現它的圖像?swift中圖像的自定義邊界

一旦點擊一個圖像的角落,相鄰的圖像會被點擊。

這裏是tap識別器的代碼片段,它檢測圖像的邊界並相應地採取一些行動。

import UIKit 
class Game: UIViewController { 
    var flag:Bool! = false 
@IBOutlet var fields: [SIXImageView]! 
var currentPlayer:String! 

override func viewDidLoad() { 
    super.viewDidLoad() 
setupField() 

} 

    // Do any additional setup after loading the view. 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func fieldTapped (recognizer:UITapGestureRecognizer){ 
    let tappedField = recognizer.view as SIXImageView 
    tappedField.setPlayer(currentPlayer) 

    let messageDict = ["field":tappedField.tag, 
    "player":currentPlayer]} 


func setupField() { 
    currentPlayer = "x" 
    for index in 0 ... fields.count - 1{ 
     let gestureRecognizer = UITapGestureRecognizer(target: self, action: "fieldTapped:") 
     gestureRecognizer.numberOfTapsRequired = 1 
     fields[index].addGestureRecognizer(gestureRecognizer) 
     checkResults() 
    } 


} 

Image having square boundary

Image having square boundary 

回答

0

您可以使用下面的代碼到UIImageView從rectagular形狀轉換爲六邊形:

var rect = image.frame 
var hexagonMask = CAShapeLayer() 
var hexagonBorder = CAShapeLayer() 
hexagonBorder.frame = image.layer.bounds 

var hexagonPath = UIBezierPath() 
var sideWidth : CGFloat = 2 * (0.5 * rect.size.width/2) 
var lcolumn = (rect.size.width - sideWidth)/2 

var rcolumn : CGFloat = rect.size.width - lcolumn; 
var height : CGFloat = 0.966025 * rect.size.height; 
var y : CGFloat = (rect.size.height - height)/2; 
var by : CGFloat = rect.size.height - y; 
var midy : CGFloat = rect.size.height/2; 
var rightmost : CGFloat = rect.size.width; 


hexagonPath.moveToPoint(CGPointMake(lcolumn, y)) 
hexagonPath.addLineToPoint(CGPointMake(rcolumn, y)) 
hexagonPath.addLineToPoint(CGPointMake(rightmost, midy)) 
hexagonPath.addLineToPoint(CGPointMake(rcolumn, by)) 
hexagonPath.addLineToPoint(CGPointMake(lcolumn, by)) 
hexagonPath.addLineToPoint(CGPointMake(0, midy)) 
hexagonPath.addLineToPoint(CGPointMake(lcolumn, y)) 

hexagonMask.path = hexagonPath.CGPath 
hexagonBorder.path = hexagonPath.CGPath 
hexagonBorder.fillColor = UIColor.clearColor().CGColor 
hexagonBorder.strokeColor = UIColor.blackColor().CGColor 
hexagonBorder.lineWidth = 5 

image.layer.mask = hexagonMask 
image.layer.cornerRadius = 10 
image.layer.masksToBounds = true 
image.layer.addSublayer(hexagonBorder) 

您可以用數值玩heightwidth,等 我希望這可以幫助你。

+0

@lazyrabbit答案的任何問題?它轉角到六角形不是? –