Методы UIView конечно же можно вызывать из контроллера, для этого делегирование и не нужно.
Делегирование нужно наоборот, сообщить контроллеру, что произошло какое-то событие у UIView (например, пользователь тапнул по строке UITableView) или запросить у контроллера какие-нибудь данные или значения (например, значение title для строки UIPickerView). При этом, держать reference на контроллер в UIView нельзя, т.к. возникнет retain cycle между UIView и UIViewController: каждый из них будет держать ссылку друг на друга, и они так никогда и не освободят память (тут можно почитать об этом подробнее:
https://developer.apple.com/library/prerelease/ios...
Конечно, UIView может держать weak reference на контроллер, но в таком случае эта вьюха будет жестко привязана к данному контроллеру и будет работать только с ним. А протоколы для того и придуманы, что можно свой контроллер реализовать так, чтобы он удовлетворял протоколу, а вьюха уже работала бы с этим протоколом. В дальнейшем, если нужно будет работать с этой вьюхой из другого контроллера, достаточно просто реализовать в нем этот же протокол.