Constraint가 있는 View에 코드를 사용하여 View 겹침

3178 단어 iOSSwiftmemo
StoryBoard에서 View나 ImageView 등 파트를 xAny-yAny로 배치할 때는 기본적으로 각 기종에서 표시에 어긋나지 않도록 Constraint를 설정합니다. 그 화면에 코드로 이미지나 UI 파트를 배치하려고 할 때는, 설정된 Constraint 에 매치한 사이즈와 위치로 하는 힌지가 있습니다.
예를 들어, StoryBoard에서 백그라운드의 Image 를 레이아웃해 두고 그 1 픽셀 안쪽에 코드로 이미지를 표시하는 경우입니다.
이 때의 방법으로는
  • 표시 할 이미지에 Constraint를 코드로 설정
  • 원본 이미지의 크기와 위치를 읽고 표시 할 이미지의 위치와 크기를 결정합니다

  • 있습니다.
    1. 은 예를 들어 배경에 대해 4방향 1픽셀의 공간이라고 하는 Constraint를 붙입니다만, 이 경우 원래의 배경화면의 애스펙트비가 어떻게 되어 있는지 모르기 때문에, 표시 화상을 백그라운드내에서 정사각형으로 가능한 한 크게 설정을 할 수 없습니다. 또 이렇게 한다면, 표시용의 ImageView 를 Storyboard 로 설정해 두고 코드로 이미지만을 나중에 설정하는 것으로 좋을 것입니다.
    2.는 사이즈와 위치를 스스로 파악할 수 있으므로 상기와 같은 백그라운드 내에서 정사각형이라든지, 라고 하는 설정도 할 수 있습니다. 이 경우 언제 원래 이미지의 정보를 얻는 것이 중요하며 일반적으로 자주하는 viewDidLoad 타이밍은 여전히 ​​원래 이미지의 Constraint를 반영하지 않으며 viewDidLayoutSubview 또는 viewDidAppear 타이밍이 아닌 경우 올바른 정보를 얻을 수 있습니다. 아니.
    또, 이 방법에서는 백그라운드 화상과의 관계가 없기 때문에, 로테이트를 허용하는 앱에서는 로테이트시에 한번 떼어내 재설정하는 처리가 필요합니다.

    ``import UIKit
    import iAd

    class PhotoPickerViewController: UIViewController,
    UINavigationControllerDelegate, UIImagePickerControllerDelegate,
    ADBannerViewDelegate {
    // 画面要素プロパティ
    
    @IBOutlet weak var _Advertise: ADBannerView!    // 広告エリア
    @IBOutlet weak var _picturebg: UIImageView!     // 画像表示バックグランド
    @IBOutlet weak var _cropFrame: UISlider!        // 切り取りフレームサイズ
    
    // 画面用変数
    var _photoView = UIImageView()                    // 画像表示エリア
    
    // 変数
    
    var _photoImage: UIImage?       // 選択写真イメージ
    
    var photoFrame: CGRect?         // 写真フレーム
    
    var puzzlePhoto: UIImage?       // パズル用写真データ
    
    
    var _pickButton: UIButton?      // ピッカーボタン
    var _okButton: UIButton?        // 確定ボタン
    var _scaleSlider: UISlider?     // スライダー
    
    // ===================
    // UI
    // ===================
    // ロード完了時に呼ばれる      **** iPad は表示位置とサイズを変える
    override func viewDidLoad() {
        super.viewDidLoad()
    
        // 設定値ロード
        loadDefault()
    
    
    }
    
    override func viewDidAppear(animated: Bool) {
        // 表示エリアサイズ設定
        if _photoView.image != nil {
            _photoView.removeFromSuperview()
        }
        let _screen = UIScreen.mainScreen().bounds
        let photoX = _picturebg.frame.origin.x + 1
        let photoY = _picturebg.frame.origin.y + 1
        let photoWidth = _picturebg.frame.width - 2
        let photoHeight = _picturebg.frame.height - 2
    
        // 画像設定
        if let photo = puzzlePhoto {
            _photoImage = photo
        } else {
            _photoImage = UIImage(named: "DefaultPhoto.png")
        }
        _photoView = makeImageView(CGRectMake(photoX, photoY, photoWidth, photoHeight), image: _photoImage!)
        _photoView.contentMode = UIViewContentMode.ScaleAspectFit
        self.view.addSubview(_photoView)
    
    
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    // イメージビューの生成
    func makeImageView(frame: CGRect, image: UIImage) -> UIImageView {
        var imageView = UIImageView()
        imageView.frame = frame
        imageView.image = image
        return imageView
    }
    

    }
    ``

    좋은 웹페이지 즐겨찾기